2.1 列表
1. 基本概念
列表由一系列按特定顺序排列的元素组成,这些元素可以是字母、数字等任何类型,各个元素之间没有任何关系;是一个有序的、可修改的(增删查改)、元素可重复、元素以逗号分隔、以中括号包围的序列。
2. 列表的增、删、改、查、排序
- 增加元素
方法 | 用法 |
---|---|
list.append() | 在列表的尾部加入指定的元素 |
list.insert(a,b) | 在列表任何位置 a 添加新元素 b |
list.extend(a) | 将指定序列的元素 a 拆分成单个字符依次追加的列表的尾部(合并) |
例:
place = ['beijing', 'shanghai']
place.append('guangzhou')
print(place)
place.insert(0, 'shenzhen')
print(place)
place.extend('xian')
print(place)
输出:
['beijing', 'shanghai', 'guangzhou']
['shenzhen', 'beijing', 'shanghai', 'guangzhou']
['shenzhen', 'beijing', 'shanghai', 'guangzhou', 'x', 'i', 'a', 'n']
进程已结束,退出代码 0
- 删除元素
方法 | 用法 |
---|---|
del list[a] | 按索引 a 删除指定元素或删除整个列表,del是Python内置功能,不是列表独有 |
list.pop(a) | 弹出,返回并删除指定索引 a 位上的数据,默认删除索引为-1(最后一个)的数据 |
list.remove(key) | 从左往右删除一个指定的元素 key,按值索引查找元素并删除 |
del()方法和pop()方法都是按索引查找元素,remove()方法则是按值查找元素。
del()方法和remove()方法在删除元素后便不能再使用该元素,pop()方法在删除后还能继续使用。
例:
place = ['beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou']
del place[0]
print(place)
place.pop(0)
print(place)
place.remove('guangzhou')
print(place)
输出:
['shanghai', 'guangzhou', 'shenzhen', 'hangzhou']
['guangzhou', 'shenzhen', 'hangzhou']
['shenzhen', 'hangzhou']
进程已结束,退出代码 0
- 修改元素
修改元素时可指定列表名和要修改元素的索引,再指定该元素的新值。
例:
place = ['beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou']
place[3] = 'wuhan'
print(place)
输出:
['beijing', 'shanghai', 'guangzhou', 'wuhan', 'hangzhou']
进程已结束,退出代码 0
- 查找元素
方法 | 用法 |
---|---|
list.count(a) | 计数,返回要计数的元素 a 在列表当中的个数 |
list.index(a) | 查找,从左往右返回查到的第一个指定元素 a 的索引,如果没有找到,报错 |
a in list | 查找元素a 是否在列表中,在输出true,否则false |
例:
place = ['beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou', 'beijing', 'beijing']
print(place.count('beijing'))
print(place.index('guangzhou'))
print('hangzhou' in place)
输出:
3
2
True
进程已结束,退出代码 0
- 元素排序
方法 | 用法 |
---|---|
list.sort() | 按照ascii码表顺序对列表进行永久性排序,向 sort() 方法中传入reverse=True 则以字母顺序反向顺序显示列表 |
sorted(list, reverse=True) | 按照ascii码表顺序对列表进行临时性排序,列表元素原来的顺序不变,向 sorted() 函数中传入 reverse=True 则以字母顺序反向顺序显示列表 |
list.reverse() | 反转列表元素的排列顺序,而不是按与字母顺序相反的顺序排列列表元素,重复两次调用则可返回原始排列顺序 |
sort()方法和 reverse()方法都是永久性修改,sorted()函数则是临时性的。
例:
place1 = ['beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou', 'beijing', 'beijing']
place2 = ['beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou', 'beijing', 'beijing']
place3 = ['beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou', 'beijing', 'beijing']
place1.sort()
place3.reverse()
print('sort :', place1)
print('sorted :', sorted(place2, reverse=True))
print('reverse :', place3)
输出:
sort : ['beijing', 'beijing', 'beijing', 'guangzhou', 'hangzhou', 'shanghai', 'shenzhen']
sorted : ['shenzhen', 'shanghai', 'hangzhou', 'guangzhou', 'beijing', 'beijing', 'beijing']
reverse : ['beijing', 'beijing', 'hangzhou', 'shenzhen', 'guangzhou', 'shanghai', 'beijing']
进程已结束,退出代码 0
3. 列表的特性
3.1 索引
索引从 0 开始而不是 1 开始;索引值为正表示从列表第一个元素向后索引,索引值为负表示从列表最后一个元素开始向前索引。
例:
foods = ['noodles', 'pizza', 'hamburger', 'cake']
print('正索引:', foods[1])
print('负索引:', foods[-1])
输出:
正索引: pizza
负索引: cake
进程已结束,退出代码 0
3.2 切片
- range(a,b,c)函数,使用 range(a,b,c) 函数可以轻松生成以 c 为间隔,从 a 到 b-1 的一系列数字。
例:
for i in range(1, 9): # 生成从1到8的连续整数
print('生成数字', i)
for i in range(1, 9, 2): # 生成下标为 1、1+2、1+2+2、1+2+2+2 ... 小于9的整数
print('以2 为间隔生成数字', i)
输出:
生成数字 1
生成数字 2
生成数字 3
生成数字 4
生成数字 5
生成数字 6
生成数字 7
生成数字 8
以2 为间隔生成数字 1
以2 为间隔生成数字 3
以2 为间隔生成数字 5
以2 为间隔生成数字 7
进程已结束,退出代码 0
- list() 函数将 range() 的结果直接转换为列表
例:
numbers = list(range(1, 6))
print(numbers)
输出:
numbers = list(range(1, 6))
print(numbers)
- 切片
创建切片时需指定要使用的第一个元素的索引和最后一个元素的索引加 1,与函数 range()一样,Python 在到达指定的第二个索引前面的元素后停止。
例:
foods = ['noodles', 'pizza', 'hamburger', 'cake']
print(foods[1:]) # 输出第一个元素之后的所有内容
print(foods[:3]) # 输出前三个元素
print(foods[:]) # 输出所有元素
print(foods[-2:]) # 输出后两个元素
print(foods[:-1]) # 输出最后一个元素之前的所有内容
print(foods[::-1]) # 倒序输出,以-1为间隔生成下标为0、0+ -1、0+ -1+ -1 ...的元素
输出:
['pizza', 'hamburger', 'cake']
['noodles', 'pizza', 'hamburger']
['noodles', 'pizza', 'hamburger', 'cake']
['hamburger', 'cake']
['noodles', 'pizza', 'hamburger']
['cake', 'hamburger', 'pizza', 'noodles']
进程已结束,退出代码 0
3.3 重复
使用 * 可以对元素重复打印
例:
foods = ['noodles', 'pizza', 'hamburger', 'cake']
print(foods*3)
输出:
['noodles', 'pizza', 'hamburger', 'cake', 'noodles', 'pizza', 'hamburger', 'cake', 'noodles', 'pizza', 'hamburger', 'cake']
进程已结束,退出代码 0
3.4 连接
使用加号 + 可以将两个列表按相加的顺序连接起来。
foods = ['noodles', 'pizza', 'hamburger', 'cake']
fruit = ['apple', 'banana', 'pear']
print(foods + fruit)
输出:
['noodles', 'pizza', 'hamburger', 'cake', 'apple', 'banana', 'pear']
进程已结束,退出代码 0
3.5 成员赋操作
使用 in 来判断元素是否在列表中
例:
foods = ['noodles', 'pizza', 'hamburger', 'cake']
print('cake' in foods) # 判断 cake 是否在列表 foods 中
输出:
True
进程已结束,退出代码 0
3.6 迭代(for 循环遍历)
在批量处理数据是很实用
例:
foods = ['noodles', 'pizza', 'hamburger', 'cake']
for i in foods:
print(i) # 遍历列表中的每个元素
输出:
noodles
pizza
hamburger
cake
进程已结束,退出代码 0
3.7 列表解析
列表解析将 for 循环和创建新元素的代码合并成一行,并自动附件新元素,让代码更加简洁。
例:
squares = []
for i in range(1, 11): # 直接使用 for 循环
square = i**2
squares.append(square)
print('直接使用 for 循环:', squares)
sqs = [sq**2 for sq in range(1, 11)] # 使用列表解析
print('使用列表解析:', sqs)
输出:
直接使用 for 循环: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
使用列表解析: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
进程已结束,退出代码 0
3.8 列表中嵌套列表
例:
foods = ['noodles', 'pizza', 'hamburger', 'cake']
fruit = ['apple', 'banana', 'pear']
animals = ['dog', 'cat', 'bird']
world = ['noodles', 'pizza', 'hamburger', 'cake', fruit, animals]
print(world[4][1]) # 索引 第四个元素 fruit 中的第二个元素
print(world[:][5]) # 切片 第五个元素
输出:
banana
['dog', 'cat', 'bird']
进程已结束,退出代码 0