列表
列表里面可以放任何数据类型,如果要取值,比字符串更加方便
但凡能被for循环遍历的类型都可以当作参数传给list()转成列表
for循环内部不建议修改数据,如果要修改放循环外修改,否则会导致代码逻辑很混乱。
data_list = [42, 3.14, "浮生六记", {"南康白起": "我等你到35岁"}, True, False, set(), ["我爱你", "与你无关"]]
print(type(data_list))
print(data_list)
# 结果如下
<class 'list'>
[42, 3.14, '浮生六记', {'南康白起': '我等你到35岁'}, True, False, set(), ['我爱你', '与你无关']]
索引取值
data_list = [42, 3.14, "浮生六记", {"南康白起": "我等你到35岁"}, True, False, set(), ["我爱你", "与你无关"]]
print(data_list[2]) # 浮生六记
嵌套取值
data_list = [42, 3.14, "浮生六记", {"南康白起": "我等你到35岁"}, True, False, set(), ["我爱你", "与你无关"]]
print(data_list[-1][-2]) # 我爱你
print(data_list[3]['南康白起']) # 我等你到35岁
data_list = [42, 3.14, "浮生六记", {"南康白起": "我等你到35岁"},{'book': ["活着", "杀死一只知更鸟", ("余华", "哈珀·李")]}]
print(data_list[4]['book'][1]) # 杀死一只知更鸟
print(data_list[4]['book'][2][-1]) # 哈珀·李
列表相加或相乘
# 列表相加
name_list = ["小满", "王昭君"]
hero_list = ["大乔", "小乔", "海月"]
real_list = name_list + hero_list
print(real_list) # ['小满', '王昭君', '大乔', '小乔', '海月']
# 列表相乘
hero_list = ["大乔", "小乔", "海月"]
real_list = hero_list * 3
print(real_list)
# ['大乔', '小乔', '海月', '大乔', '小乔', '海月', '大乔', '小乔', '海月']
加入列表
append
name_list = ["小满"]
name_list.append({"南康": "快快长大"})
name_list.append(["余华", "活着"])
name_list.append((True, "Yes"))
name_list.append("我是一个士兵,我爱上了将军的女儿。")
print(name_list)
# ['小满', {'南康': '快快长大'}, ['余华', '活着'], (True, 'Yes'), '我是一个士兵,我爱上了将军的女儿。']
extend
name_list = ["小满", "王昭君"]
hero_list = ["大乔", "小乔", "海月"]
name_list.extend(name_list)
print(name_list) # ['小满', '王昭君', '小满', '王昭君']
print(hero_list) # ['大乔', '小乔', '海月']
name_list = ["小满", "王昭君"]
hero_dict = {
"大乔": 4,
"小乔": 3
}
# 添加的是字典的键
name_list.extend(hero_dict)
print(name_list) # ['小满', '王昭君', '大乔', '小乔']
name_list = ["小满", "王昭君"]
sentence = "你是年少的欢喜"
name_list.extend(sentence)
print(name_list) # ['小满', '王昭君', '你', '是', '年', '少', '的', '欢', '喜']
name_list = ["小满", "王昭君"]
name_tuple = ["小乔", "大乔"]
name_list.extend(name_tuple)
print(name_list) # ['小满', '王昭君', '小乔', '大乔']
name_list = ["小满", "王昭君"]
name_set = {"小乔", "大乔"}
name_list.extend(name_set)
print(name_list) # ['小满', '王昭君', '小乔', '大乔']
insert
name_list = ["小满", "王昭君"]
name_list.insert(1, "海月")
print(name_list) # ['小满', '海月', '王昭君']
使用+
号
name_list = ["小满", "王昭君"]
hero_list = ["王昭君", "海月"]
result = name_list + hero_list
print(result) # ['小满', '王昭君', '王昭君', '海月']
删除元素
pop方法
name_list = ["小满", "王昭君", "海月"]
print(name_list) # ['小满', '王昭君', '海月']
# pop()括号里面可以传一个索引
# 当不传任何索引时候,默认删除列表的最后一个元素,返回值就是被删除的元素
deleted_hero = name_list.pop()
print(f"{deleted_hero} 被删除了。") # 海月 被删除了。
print(name_list) # ['小满', '王昭君']
# 传入索引, 删除指定索引位置的元素
deleted_hero = name_list.pop(1)
print(f"{deleted_hero} 被删除了") # 王昭君 被删除了
print(name_list) # ['小满']
del方法
按索引去删除
# 语法 del list[index]
name_list = ["小满", "王昭君", "海月"]
del name_list[1]
print(name_list) # ['小满', '海月']
按切片去删除
# 0 1 2 3 4
name_list = ["小满", "王昭君", "海月", "大乔", "小乔"]
del name_list[1:4] # ['小满', '小乔']
print(name_list)
# 0 1 2 3 4
name_list = ["小满", "王昭君", "海月", "大乔", "小乔"]
del name_list[::2]
print(name_list) # ['王昭君', '大乔']
# 0 1 2 3 4
name_list = ["小满", "王昭君", "海月", "大乔", "小乔"]
del name_list[1::2]
print(name_list) # ['小满', '海月', '小乔']
remove方法
name_list = ['小满', '大乔', '海月', '小乔']
# list.remove()无返回值
result = name_list.remove('大乔')
print(result) # None
name_list = ['小满', '大乔', '海月', '小乔']
name_list.remove('大乔')
print(name_list) # ['小满', '海月', '小乔']
name_list = ['小满', '大乔', '海月', '小乔']
# 当删除的元素不存在会报错
name_list.remove('王昭君')
print(name_list) # ValueError: list.remove(x): x not in list
报错解决方案,可以先判断是否在列表里面
name_list = ['小满', '大乔', '海月', '小乔']
name = "王昭君"
if name in name_list:
name_list.remove(name)
print(name_list) # ['小满', '大乔', '海月', '小乔']
name_list = ['小满', '大乔', '海月', '小乔']
name = "海月"
if name in name_list:
name_list.remove(name)
print(name_list) # ['小满', '大乔', '小乔']
列表排序
sort
列表里面的元素必须是同种类型才可以
可以传入两个参数,一个是key 另外一个是bool值
默认是升序排序
number_list = [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
# list.sort() 无返回值
result = number_list.sort()
print(result) # None
number_list = [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
# 默认从小到大
number_list.sort()
print(number_list) # [31, 47, 58, 59, 60, 69, 74, 91, 93, 95]
number_list = [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
# list.sort()可以接受一个参数
# 默认从小到大
# 为True结果从大到小
number_list.sort(reverse=True)
print(number_list) # [95, 93, 91, 74, 69, 60, 59, 58, 47, 31]
sorted
sorted(iterable, key=None, reverse=False)函数用于对可迭代对象进行排序。
它接受三个参数:
iterable:要排序的可迭代对象。
key:可选参数,用于指定排序的依据。默认为None,表示按照元素的自然顺序进行排序。
reverse:可选参数,用于指定是否以逆序进行排序。默认为False,表示升序排序。
用一个新的变量值去接受,不影响原列表(id不一样)
number_list = [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
new_number_list = sorted(number_list)
print(number_list) # [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
print(new_number_list) # [31, 47, 58, 59, 60, 69, 74, 91, 93, 95]
number_list = [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
new_number_list = sorted(number_list, reverse=True)
print(number_list) # [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
print(new_number_list) # [95, 93, 91, 74, 69, 60, 59, 58, 47, 31]
当结合lambda函数使用时,可以自定义排序的规则或反转的方式。lambda函数是一种匿名函数,可以在需要一个简单函数的地方使用。
下面是一个使用sorted()函数结合lambda函数的示例,按照元素的绝对值进行排序:
number_list = [58, 59, -7, 60, -18, 69, 31, -36, 52, 35]
new_number_list = sorted(number_list, key=lambda x: abs(x))
print(number_list) # [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
print(new_number_list) # [-7, -18, 31, 35, -36, 52, 58, 59, 60, 69]
在这个示例中,lambda x: abs(x)定义了一个匿名函数,它以参数x为输入,返回x的绝对值。sorted()函数根据这个绝对值的规则对numbers列表进行排序。
reverse
name_list = ['小满', '大乔', '海月']
# list.reverse()无返回值
result = name_list.reverse()
print(result) # None
name_list = ['小满', '大乔', '海月']
name_list.reverse()
print(name_list) # ['海月', '大乔', '小满']
reversed
reversed(sequence)函数用于反转序列中的元素。
它接受一个参数:
sequence:要反转的序列,可以是列表、元组或字符串。
number_list = [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
new_number_list = list(reversed(number_list))
print(number_list) # [58, 59, 60, 69, 31, 93, 74, 47, 91, 95]
print(new_number_list) # [95, 93, 91, 74, 69, 60, 59, 58, 47, 31]
count统计次数
name_list = ['小满', '大乔', '海月', '小乔', "小满"]
count= name_list.count("小满")
print(count) # 2
复制列表
copy方法
内存地址不一样
name_list = ['小满', '大乔', '海月', '小乔']
hero_list = name_list.copy()
print(name_list) # ['小满', '大乔', '海月', '小乔']
print(hero_list) # ['小满', '大乔', '海月', '小乔']
print(id(name_list)) # 2281024354880
print(id(hero_list)) # 2281024342272
name_list.remove('海月')
# list.copy()方法创建的列表id和之前的不一样
# 所以当其中一个列表操作增删改查的时候,不会影响另外一个列表
print(name_list) # ['小满', '大乔', '小乔']
print(hero_list) # ['小满', '大乔', '海月', '小乔']
直接用=号赋值
内存地址一样
name_list = ['小满', '大乔', '海月', '小乔']
hero_list = name_list
print(name_list) # ['小满', '大乔', '海月', '小乔']
print(hero_list) # ['小满', '大乔', '海月', '小乔']
print(id(name_list)) # 1144123914816
print(id(hero_list)) # 1144123914816
name_list.remove("海月")
# [:]赋值的方法创建的列表id和之前的一样
# 所以当其中一个列表操作增删改查的时候,会影响另外一个列表
print(name_list) # ['小满', '大乔', '小乔']
print(hero_list) # ['小满', '大乔', '小乔']
v1 = [1,2,3,4,5]
v2 = [v1,v1,v1]
v2[1][0] = 111
v2[2][0] = 222
print(id(v1)) # 2133014532800
for inner_list in v2:
print(id(inner_list)) # 2133014532800 重复3次
print(v1) # [222, 2, 3, 4, 5]
print(v2) # [[222, 2, 3, 4, 5], [222, 2, 3, 4, 5], [222, 2, 3, 4, 5]]
使用[:]赋值
内存地址不一样
name_list = ['小满', '大乔', '海月', '小乔']
hero_list = name_list[:]
print(name_list) # ['小满', '大乔', '海月', '小乔']
print(hero_list) # ['小满', '大乔', '海月', '小乔']
print(id(name_list)) # 2217441000000
print(id(hero_list)) # 2217440987392
name_list.remove("海月")
# [:]赋值的方法创建的列表id和之前的不一样
# 所以当其中一个列表操作增删改查的时候,不会影响另外一个列表
print(name_list) # ['小满', '大乔', '小乔']
print(hero_list) # ['小满', '大乔', '海月', '小乔']
清空列表
clear方法
# list.clear()方法无返回值
name_list = ['小满', '大乔', '海月', '小乔']
result = name_list.clear()
print(result) # None
name_list = ['小满', '大乔', '海月', '小乔']
name_list.clear()
print(name_list) # []
删除整个列表
name_list = ['小满', '大乔', '海月', '小乔']
print(name_list) # ['小满', '大乔', '海月', '小乔']
del name_list
print(name_list) # 报错 NameError: name 'name_list' is not defined.
列表补充
队列 FIFO 先进先出
- 相当于上扶梯,先上的先出来
>>> l = []
>>> l.append(1)
>>> l.append(2)
>>> l.append(3)
>>> print(l)
[1, 2, 3]
>>> l.pop(0)
1
>>> l.pop(0)
2
>>> l.pop(0)
3
>>> l
[]
堆栈LIFO 后进先出
- 相当于往衣柜放衣服,后放进去的先取出来
>>> l = []
>>> l.append(1)
>>> l.append(2)
>>> l.append(3)
>>> print(l)
[1, 2, 3]
>>> l.pop()
3
>>> l.pop()
2
>>> l.pop()
1
>>> l
[]