列表

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

但凡能被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
[]
posted @ 2023-11-28 16:34  小满三岁啦  阅读(3)  评论(0编辑  收藏  举报