python---列表
1. 什么是列表?
列表由一系列按特定顺序排列的元素组成。在Python中,用方括号([])表示列表,包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系,并用逗号分隔其中的元素。
2. 列表的创建
直接为列表赋值
cars = ['BMW', 'Audi', 'toyata']
创建空列表
#方法一 [] list1 = [] #方法二 list() list2 = list()
3. 列表的操作
a. 索引与切片
索引
cars = ['BMW', 'Audi', 'toyota'] print(cars[1]) # 运行结果:Audi print(cars[-1]) # 运行结果: toyota list1 = [1, 2, 3, ['a', 'b', 'c']] print(list1[3]) # 运行结果: ['a', 'b', 'c'] print(list1[3][2]) # 运行结果:c
切片
list1 = [1, 2, 3, ['a', 'b', 'c']] print(list1[0:2]) # 运行结果: [1, 2] print(list1[-1][1:3]) # 运行结果: ['b', 'c']
b. 列表的循环与遍历
1.
cars = ['BMW', 'Audi', 'toyota'] # for 循环遍历 for car in cars: print(car) # while循环遍历 number = len(cars) i = 0 while i < number: print(cars[i]) i += 1 """ 运行结果: BMW Audi toyota """
2. 列表中嵌套列表
cars1 = ['BMW', 'Audi'] cars2 = ['Toyota','Subaru'] cars = [cars1, cars2] for item in cars: print(item) """ 运行结果: ['BMW', 'Audi'] ['Toyota', 'Subaru'] """ for item in cars: for name in item: print(name) """ 运行结果: BMW Audi Toyota Subaru """
3. 使用enumerate
cars1 = ['BMW', 'Audi'] cars2 = ['Toyota', 'Subaru'] cars = [cars1, cars2] # 遍历一维列表 for i, value in enumerate(cars1): print(f'{i+1}个元素的值是{value}') """ 运行结果: 1个元素的值是BMW 2个元素的值是Audi """ # 遍历二维列表 for i, value in enumerate(cars): print(f'{i + 1}个元素的值是{value}') for j, name in enumerate(value): print(f'{j + 1}个元素的值是{name}') """ 运行结果: 1个元素的值是['BMW', 'Audi'] 1个元素的值是BMW 2个元素的值是Audi 2个元素的值是['Toyota', 'Subaru'] 1个元素的值是Toyota 2个元素的值是Subaru """
c. 增
append(): 将元素增加到列表末尾
cars = ['BMW', 'Audi']
cars.append('Toyota')
print(cars)
# 运行结果:['BMW', 'Audi', 'Toyota']
insert():在指定位置添加元素
cars = ['Audi', 'Toyota']
cars.insert(0, 'BMW')
print(cars)
# 运行结果:['BMW', 'Audi', 'Toyota']
extend(): 将列表作为对象增加到列表末尾
cars = ['BMW', 'Audi']
cars1 = ['Toyota', 'Subaru']
cars.extend(cars1)
print(cars)
# 运行结果:['BMW', 'Audi', 'Toyota', 'Subaru']
d. 改
cars = ['BMW', 'Audi', 'Toyota']
cars[2] = 'Subaru'
print(cars)
# 运行结果: ['BMW', 'Audi', 'Subaru']
cars[5] = 'Beyond'
print(cars)
# 运行结果: IndexError: list assignment index out of range
e. 查
in
cars = ['BMW', 'Audi', 'Toyota', 'Subaru']
if 'BMW' in cars:
print('BMW is in cars')
else:
print('BMW is not in cars')
# 运行结果: BMW is in cars
not in
cars = ['BMW', 'Audi', 'Toyota', 'Subaru']
if 'Beyond' not in cars:
print('Beyond is not in cars')
else:
print('Beyond is in cars')
# 运行结果: Beyond is not in cars
index: 获取索引,如果列表里有重复的元素, 则返回第一个元素的索引; 如果没有该元素则返回 ValueError: 'Beyond' is not in list
cars = ['BMW', 'Audi', 'Toyota', 'Subaru']
print(cars.index('Audi'))
# 运行结果: 1
cars.append('Audi')
print(cars.index('Audi'))
# 运行结果: 1
print(cars.index('Beyond'))
# 运行结果: ValueError: 'Beyond' is not in list
count:计算元素个数
cars = ['BMW', 'Audi', 'Toyota', 'Subaru', 'Audi']
print(cars.count('Audi'))
# 运行结果:2
print(cars.count('Beyond'))
# 运行结果:0
f. 删
del: 根据索引删除
cars = ['BMW', 'Audi', 'Toyota', 'Subaru', 'Audi']
del cars[-1]
print(cars)
# 运行结果:['BMW', 'Audi', 'Toyota', 'Subaru']
pop(): 删除最后一个元素
cars = ['BMW', 'Audi', 'Toyota', 'Subaru']
cars.pop()
print(cars)
# 运行结果: ['BMW', 'Audi', 'Toyota']
remove(): 删除指定元素,删除第一个匹配的元素
cars = ['BMW', 'Audi', 'Toyota', 'Subaru', 'BMW']
cars.remove('Audi')
print(cars)
# 运行结果: ['BMW', 'Toyota', 'Subaru', 'BMW']
cars = ['BMW', 'Audi', 'Toyota', 'Subaru', 'BMW']
cars.remove('BMW')
print(cars)
# 运行结果: ['Audi', 'Toyota', 'Subaru', 'BMW']
cars = ['BMW', 'Audi', 'Toyota', 'Subaru', 'BMW']
cars.remove('Beyond')
print(cars)
# 运行结果:ValueError: list.remove(x): x not in list
g. 排序
sort(): 将list按照指定顺序重新排列,默认由小到大, 参数reverse=True 可改为倒序,由大到小
num = [2, 4, 5, 3, 7, 8, 1]
num.sort()
print(num)
# 输出的结果: [1, 2, 3, 4, 5, 7, 8]
num = [2, 4, 5, 3, 7, 8, 1]
num.sort(reverse=True)
print(num)
# 输出结果: [8, 7, 5, 4, 3, 2, 1]
reverse(): 将list倒转过来
num = [2, 4, 5, 3, 7, 8, 1]
num.reverse()
print(num)
# 输出的结果: [1, 8, 7, 3, 5, 4, 2]
h. 复制
copy(): 浅拷贝:没有拷贝子对象,所以原始数据改变,子对象会改变
list_a = [1, 2, ['a', 'b']]
list_b = list_a.copy()
print(list_a)
print(list_b)
"""
运行结果:
[1, 2, ['a', 'b']]
[1, 2, ['a', 'b']]
"""
list_a.append(3)
print(list_a)
print(list_b)
"""
运行结果:
[1, 2, ['a', 'b'], 3]
[1, 2, ['a', 'b']]
"""
list_a[2].append('c')
print(list_a)
print(list_b)
"""
运行结果:
[1, 2, ['a', 'b', 'c'], 3]
[1, 2, ['a', 'b', 'c']]----里边的子对象被改变了
"""
deepcopy(): 包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
import copy list_a = [1, 2, ['a', 'b']] list_b = copy.deepcopy(list_a) print(list_a) print(list_b) """ 运行结果: [1, 2, ['a', 'b']] [1, 2, ['a', 'b']] """ list_a.append(3) print(list_a) print(list_b) """ 运行结果: [1, 2, ['a', 'b'], 3] [1, 2, ['a', 'b']] """ list_a[2].append('c') print(list_a) print(list_b) """ [1, 2, ['a', 'b', 'c'], 3] [1, 2, ['a', 'b']] """
4.列表解析式
a. 最简形式:[expression for item in list]
""" 求1-5 的平方 """ print([i ** 2 for i in range(1, 6)]) # 输出结果:[1, 4, 9, 16, 25]
word_list = ["I", "love", "China"] print([item.title() for item in word_list]) # 输出结果:['I', 'Love', "China"]
b. 过滤条件形式 [expression for item in list if conditional]
如果只有if, 则if在for循环后边;如果有if...else, 则if...else在for循环前边
list_val = [] for i in range(1, 21): if i % 2 ==0: list_val.append(i) print(list_val) # 列表解析式 print([i for i in range(1, 21) if i % 2 == 0]) # 运行结果:[2, 4, 6, 8, 10, 12, 14, 16, 18]
names = ['Elsa', 'John', 'Jessie'] new_list = [] for item in names: if len(item) > 4: new_list.append(item.upper()) else: new_list.append(item.lower()) print(new_list) # 列表解析式 print([item.upper() if len(item) >4 else item.lower() for item in names]) # 运行结果:['elsa', 'john', 'JESSIE']
c. 循环嵌套形式[expression for i in list1 for j in list2]
list_val = [] for i in range(1,3): for j in range(1,3): list_val.append(f'{i} + {j}') print(list_val) # 列表解析式 print([f'{i} + {j}' for i in range(1, 3) for j in range(1, 3)]) # 运行结果:['1 + 1', '1 + 2', '2 + 1', '2 + 2']