1、数据结构-列表
1.1 在Python中,列表是由一系元素按特定顺序构成的数据序列,这样就意味着定义一个列表类型的变量,可以保存多个数据,而且允许有重复的数据。跟上一课我们讲到的字符串类型一样,列表也是一种结构化的、非标量类型,操作一个列表类型的变量,除了可以使用运算符还可以使用它的方法。
列表是一种可变数据类型,也就是说列表可以添加元素、删除元素、更新元素。
items1 = list(range(1, 10)) print(items1) # [1, 2, 3, 4, 5, 6, 7, 8, 9] items2 = list('hello') print(items2) # ['h', 'e', 'l', 'l', 'o']
1.2 遍历取出列表中的元素,可以使用for循环
items = ['Python', 'Java', 'Go', 'Kotlin'] for index in range(len(items)): print(items[index])
items = ['Python', 'Java', 'Go', 'Kotlin']
for item in items:
print(item)
“统计骰子每个点出现的次数”
import random counters = [0] * 6 for _ in range(6000): face = random.randint(1, 6) counters[face - 1] += 1 for face in range(1, 7): print(f'{face}点出现了{counters[face - 1]}次')
我们用counters
列表中的六个元素分别表示1到6的点数出现的次数,最开始的时候六个元素的值都是0
。接下来用随机数模拟掷色子,如果摇出1点counters[0]
的值加1
,如果摇出2点counters[1]
的值加1
,以此类推。
1.3 列表的方法: 添加和删除元素
items = ['Python', 'Java', 'Go', 'Kotlin'] # 使用append方法在列表尾部添加元素 items.append('Swift') print(items) # ['Python', 'Java', 'Go', 'Kotlin', 'Swift'] # 使用insert方法在列表指定索引位置插入元素 items.insert(2, 'SQL') print(items) # ['Python', 'Java', 'SQL', 'Go', 'Kotlin', 'Swift'] # 删除指定的元素 items.remove('Java') print(items) # ['Python', 'SQL', 'Go', 'Kotlin', 'Swift'] # 删除指定索引位置的元素 items.pop(0) items.pop(len(items) - 1) print(items) # ['SQL', 'Go', 'Kotlin'] # 清空列表中的元素 items.clear() print(items) # []
在使用remove
方法删除元素时,如果要删除的元素并不在列表中,会引发ValueError
异常,错误消息是:list.remove(x): x not in list
。在使用pop
方法删除元素时,如果索引的值超出了范围,会引发IndexError
异常,错误消息是:pop index out of range
。
1.4 元素的位置和次数
列表类型的index
方法可以查找某个元素在列表中的索引位置;因为列表中允许有重复的元素,所以列表类型提供了count
方法来统计一个元素在列表中出现的次数。请看下面的代码。
items = ['Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python'] # 查找元素的索引位置 print(items.index('Python')) # 0 print(items.index('Python', 2)) # 5 # 注意:虽然列表中有'Java',但是从索引为3这个位置开始后面是没有'Java'的 print(items.index('Java', 3)) # ValueError: 'Java' is not in list
items = ['Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python'] # 查找元素出现的次数 print(items.count('Python')) # 2 print(items.count('Go')) # 1 print(items.count('Swfit')) # 0
1.5 元素排序和反转
列表的sort
操作可以实现列表元素的排序,而reverse
操作可以实现元素的反转,代码如下所示。
items = ['Python', 'Java', 'Go', 'Kotlin', 'Python'] # 排序 items.sort() print(items) # ['Go', 'Java', 'Kotlin', 'Python', 'Python'] # 反转 items.reverse() print(items) # ['Python', 'Python', 'Kotlin', 'Java', 'Go']
1.6 列表的生成式 一般都是使用生成式的方法来
通过for
循环为空列表添加元素。
# 创建一个由1到9的数字构成的列表 items1 = [] for x in range(1, 10): items1.append(x) print(items1) # 创建一个由'hello world'中除空格和元音字母外的字符构成的列表 items2 = [] for x in 'hello world': if x not in ' aeiou': items2.append(x) print(items2) # 创建一个由个两个字符串中字符的笛卡尔积构成的列表 items3 = [] for x in 'ABC': for y in '12': items3.append(x + y) print(items3)
通过生成式创建列表。
# 创建一个由1到9的数字构成的列表 items1 = [x for x in range(1, 10)] print(items1) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 创建一个由'hello world'中除空格和元音字母外的字符构成的列表 items2 = [x for x in 'hello world' if x not in ' aeiou'] print(items2) # ['h', 'l', 'l', 'w', 'r', 'l', 'd'] # 创建一个由个两个字符串中字符的笛卡尔积构成的列表 items3 = [x + y for x in 'ABC' for y in '12'] print(items3) # ['A1', 'A2', 'B1', 'B2', 'C1', 'C2']