

























人生苦短,我用Python![1]
这个系列是一个帮助零基础的人入门编程的教程,本文承接上一篇,介绍Python的数据结构和集合类型。
Python中的数据类型可以分为两种,
原子类型是不可分的,只表示一个值,比如说int,float和bool。
集合类型是多个数据值的集合,比如说str,list,tuple,set和dict,这些类型将在本文中介绍。
数据结构(Data Structure)定义了数据是如何在内存中物理存储和组织的,也指明了某个集合中的单个数据值是如何访问和修改的。
数据类型和数据结构的区别:
数据结构举例:
在Python中有非原始数据结构的实现,
a = "Hello"a = [1, 3, 5]a = (6, 2)a = {1, 5, 3}a = {"a": "b", 1: 2}内存(Memory)是连续数据存储块的集合。Python代码运行时的数据会存储在内存中。
在内存中存的信息一般是以下两者,
一个Python对象(和它的值)
指向另一个内存地址的引用

在Python中常见的str,list和tuple都是基于数组的结构。这些集合中的成员(item)是顺序的存储在一个连续的内存块上。所以在这些集合类型中,一般使用下标(index)对某个成员进行访问。
字符串(String)在Python中经常用str表示,是一个文本表示的数据类型,一个或多个字符的集合。
例: a_str = "Python"

在Python中通过index访问成员是使用中括号”a_str[index]”,其中index是从0开始。例:
a_str[0]a_str[1]a_str[len(a_str) - 1] 或者 a_str[-1]字符串可以使用”+”进行拼接操作。
1 | first_name = "John" |
得到的结果是
1 | John Smith |
字符串也可以切片取一部分,通过a_str[start_index:end_index]获取从start_index(包含)到end_index(不包含)的子字符串。
如果start_index是0的话,可以省略;如果end_index是最后一位的话也可以省略。
1 | message = "Welcome to Python" |
结果是
1 | Welcome |
字符串的更多方法
1 | message = " Welcome to Python " |
一般来说比较常用的有
str.capitalize() 像标题一样每个单词大写第一个字符str.count() 返回这个子字符串在这个字符串中的出现次数str.endswith() 返回这个字符串是否是有这个后缀str.find() 查找子字符串的位置str.index() 返回所给的子字符串的indexstr.isdigit() 这个字符串是否全是数字str.join() 将list的全部元素都合并成一个字符串str.lower() 转换成小写str.replace() 替换其中的某个子字符串str.split() 通过某个分隔符分割成列表str.strip() 去除首尾的空格更多的字符串方法请参考Python3官方文档[2]
Python中的序列(Sequence)是一个数据的集合。这些数据中的元素都可以读取,而有些序列还可以修改其中的元素。
这些序列类型中的通用功能
min, max, seq.index, seq.count等等接下来举几个例子来看看。
in表达式
1 | if x in seq: |
拼接
1 | new_seq = seq_one + seq_two |
通过下标取值
1 | a_seq[index] |
切片
1 | a_seq[start_index:end_index] |
以下我们来专门看看这些具体的序列类型。
列表(list)是Python中非常常用的一个类型。
创建列表的举例
a_list = [], a_list = list()a_list = [1, "two", 3.0, '4']a_list = [1] * 6列表中的下标是从0开始的。
1 | fruits = ["Apple", "Mango", "Strawberry", "Banana", "Guava"] |
| index | [0] | [1] | [2] | [3] | [4] |
|---|---|---|---|---|---|
| value | “Apple” | “Mango” | “Strawberry” | “Banana” | “Guava” |
给列表添加元素:
a_list.append(new_item)a_list.insert(index, new_item)移除元素:
a_list.pop()和a_list.pop(index)a_list.remove(item)排列元素:
a_list.sort()a_list.reverse()一些操作列表的例子:
1 | num_list = [3, 4, 2, 6] |
用for循环搭配range进行遍历
1 | num_list = [1, 2, 3, 4, 5] |
列表推导式(list comprehension)是一个用于创建新列表的具有python特色的方法,新列表的元素都是通过某种方法从已有列表中生成。
举个例子,如果我们希望把一个列表中的奇数收集起来,做一个平方添加到新列表里。
1 | num_list = [1, 2, 3, 4, 5] |
等价于
1 | num_list = [1, 2, 3, 4, 5] |
元组(tuple)是python中用于表示打包一块的多类型集合的类型。
创建元组的举例:
a_tuple = ()a_tuple = (0, "a")a_tuple = tuple([0, "a"])读取元组中的元素:
a_tuple[0]x, y = a_tuple元组是不可变的,不能对其中一个元素重新赋值。
1 | coord = (0, 1) |
列表和元组主要区别:
这一节中会试试如何使用字符串和列表去给一个句子做字符统计,试试看一步一步的做下来吧。这次使用的环境和第一篇教程相同,具体内容请看Python编程基础01:Python语言和编程。
这开始编程之前,可以先回忆一下字符串和列表的性质。先来给一个俳句的每一个字符串都打印出来。
1 | list_of_strings = ["This blog teaches code", "Code that will be useful soon", "Let me try this out"] |
我们也可以把多个字符串连接到一个列表中,但是依然每一句占一行。这里我们需要用\n换行符来连接字符串。
1 |
|
当然我们也可以轻松把这一个长字符串重新还原成列表。
1 | print(haiku.split("\n")) |
从这里开始,我们需要给上一部分定义的俳句的所有可能字符构造一个列表。我们可以用以下方式使用字符串。
1 |
|
以上只是创建这个列表的其中一个办法,有很多种办法都可以创建字母表。
接下来让我们创建26个0来作为字符计数列表的初始化。
1 |
|
然后就开始遍历每一个字符,把计数统计上去吧。以下的代码只是一种解决方案,编程是一种艺术,就像不同的画家有不同的画风一样,可以试试看写出自己的风格。
不过请注意,以上定义的字母表是纯小写的,所以在遍历匹配的时候需要转换成小写进行匹配。
1 |
|
结果是类似于这样
1 | a:2 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。