列表

发布时间 2023-11-28 16:37:11作者: 小满三岁啦

列表里面可以放任何数据类型,如果要取值,比字符串更加方便

但凡能被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)  # ['大乔', '小乔', '海月']

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]

reverse

name_list = ['小满', '大乔', '海月']
# list.reverse()无返回值
result = name_list.reverse()

print(result)  # None
name_list = ['小满', '大乔', '海月']
name_list.reverse()

print(name_list)  # ['海月', '大乔', '小满']

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
[]