列表
用于存储多个元素 ,列表也是一种数据类型,所以列表可以套列表(可借用数据结构中广义表的概念) ,列表元素的索引方式和字符串的方式相同(下标、切片)。
list1['abc','bcd','efg'] list[1,2,3,4,5,1.5]
#列表可以套列表:
list3=[['a'],['b','c'],['d','e','f']]
定义列表
- 空列表:[] -->list1=[]
- 有内容的列表: list2=['元素1','元素2','元素3']
列表的常见操作
增
- append:会按照执行顺序往列表中添加元素。追加。
- extend:相当于加号,能把两个列表连接起来,主要看谁调用extend 。
list1 = []
list2 = ['苹果']
list3 = ['牛奶', '面包']
list1.append('酸奶')
print(list1) # 结果:--->['酸奶']
list2.append('酸奶')
print(list2) # 结果:--->['苹果', '酸奶']
list3.append(list2)
print(list3) # 结果:--->['牛奶', '面包', ['苹果', '酸奶']]
list1.extend(list2)
print(list1) # 结果:--->['酸奶', '苹果', '酸奶']
list2.extend(list3)
print(list2) # 结果:--->['苹果', '酸奶', '牛奶', '面包', [...]]
print(list1 + list1) # 结果:--->['酸奶', '苹果', '酸奶', '酸奶', '苹果', '酸奶']
一个嵌套小练习
# 例:超时购物
container = [] # 存放商品
flag = True
while flag:
name = input('请输入商品名:')
price = input('请输入价格:')
number = input('请输入个数:')
goods = [name, price, number]
container.append(goods)
answer = input('是否继续购买(按q或Q退出)')
if answer.lower() == 'q':
flag = False
for goods in container:
print(goods)
删
- pop(index):根据下标删除列表中元素,下标在写的时候要注意不要超出范围 ,超过会报错。不填的话,会默认将从后往前依次进行删除
- remove(element):根据元素名称删除,如果元素不存在则会报错。从左往右依次删,删第一个数。如果列表中存在多个同名的元素,则只会删除第一个。用循环删除多个。remove在删除的时候会改变列表的长度,正常的删除重复内容会有遗漏
- clear:直接清除列表中的所有元素,变成一个空表
- del:根据下标进行删除,也可以删除对应的列表名
# 例:pop
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
alist.pop(4)
print(alist) # 结果:--->[1, 2, 3, 4, 6, 7, 8, 9]
# 例:remove
blist = [1, 0, 4, 2, 3, 5, 3, 2, 4, 4, 5, 5]
blist.remove(5)
print(blist) # 结果:--->[1, 0, 4, 2, 3, 3, 2, 4, 4, 5, 5]
# 易错事例
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
for i in a:
if i == '酸奶':
a.remove(i)
print(a) # 结果:--->['火腿肠', '辣条', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
# 重新遍历的方法,可以避免这个问题
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
for i in a[::]:
if i == '酸奶':
a.remove(i)
print(a) # 结果:--->['火腿肠', '辣条', '面包', '蛋糕', '可乐']
# 也可以用取元素的方法创建一个新列表
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
b = []
for i in a:
if i != '酸奶':
b.append(i)
print(b)
# 也可以先查看列表中待删元素的个数来决定删除的重复次数
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
b = a.count('酸奶')
for i in range(b):
a.remove('酸奶')
print(a)
# 例:clear
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
a.clear()
print(a)
# 例:del
# del删除指定下标元素
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
del a[0]
print(a) # 结果:--->['辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
# del删除列表名
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
b = a
del a
print(b) # 结果:--->['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
# print(a) # 结果:--->报错
改
-
insert:在某个位置插入一个值,其他元素往后移
格式:a.insert(位置,新元素) 找到位置,加入值
-
append:插入一个元素放在最后,这也是与insert的区别
# 例:insert
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
a.insert(0, '奶茶')
print(a) # 结果:--->['奶茶', '火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
# 例:append
a.append('奶茶')
print(a) # 结果:--->['奶茶', '火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶', '奶茶']
# 例:extend
a = [1, 1, 1, 1, 1]
b = [2, 2, 2, 2, 2]
a.extend(b)
print(a) # 结果:--->[1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
b.extend(a)
print(b) # 结果:--->[2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
查
-
元素 in 列表 ---> 返回布尔类型
与之相对的是 not in
-
列表.index(元素) ---> 返回元素的下标位置,如果没有此元素则报错
-
列表.count(元素) ---> 返回整数,如果元素不存在则返回0,如果元素存在则返回元素个数
# 例:元素 in 列表
a = ['a', 'b', 'c', 'd']
if 'a' in a:
print(True)
else:
print(False)
# 结果:--->True
if 'h' not in a:
print(True)
else:
print(False)
# 结果:--->True
# 例:index
print(a.index('a')) # 结果:--->0
# 例:count
a = ['火腿肠', '辣条', '酸奶', '酸奶', '面包', '蛋糕', '可乐', '酸奶', '酸奶']
print(a.count('酸奶')) # 结果:--->4
排序
- sort:默认从小到大排。
- reverse:翻转,为True则变,为False则不变。
# 例:sort
a = [12, 43, 31, 76, 42, 98, 14, 35, 57]
a.sort() # 默认情况下 reverse=False
print(a) # 结果:--->[12, 14, 31, 35, 42, 43, 57, 76, 98]
a = [12, 43, 31, 76, 42, 98, 14, 35, 57]
a.sort(reverse=True)
print(a) # 结果:--->[98, 76, 57, 43, 42, 35, 31, 14, 12]
交换两个变量的值
- 冒泡法;--经典
- python自己的交换方法: a,b=b,a
# 例:数值交换
a = 111
b = 222
print(id(a), id(b)) # 结果:--->2567481677616 2567481681232
a, b = b, a
print(a, b) # 结果:--->222 111
print(id(a), id(b)) # 结果:--->2567481681232 2567481677616
# 可以理解成改变了变量名指向的地址
列表推导式
一种简化表达式来得到列表。
-
格式1:[i for i in 可迭代的]:把循环结构放入到列表中。
for循环用于产生列表中的元素i,在将i放入列表中
-
格式2:[i for i in 可迭代的 if条件]:将循环和判断一同放入列表中。
先进行循环,拿到i;再用i来判断是否要存入列表中
-
格式3:[i if 条件 else 命令 for i in 可迭代的]:如果存在有条件不成立要执行的语句,就用到if ...else...
把if...else...放在循环前面。先循环拿参数i;把i带入判断语句进行判断,如果判断为True,存入列表;如果判断为False,执行命令。
-
格式4:[(i,j)for i in 可迭代的 for j in 可迭代的]:多个for循环,靠前的for先执行
#格式一:
list1 = []
for i in range(1, 21):
list1.append(i)
print(list1) # 结果:--->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
list1 = [i for i in range(1, 21)]
print(list1) # 结果:--->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
list1 = [i for i in range(0, 51, 2)]
print(
list1) # 结果:--->[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
list1 = [i * 2 for i in range(0, 26)]
print(
list1) # 结果:--->[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
#格式二:
list1 = [i for i in range(0, 51, 2) if i % 2 == 0]
print(
list1) # 结果:--->[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
#格式三:
list2 = ['abc', 'eFg', 'hij', 'KLM', 'NOp', 'Qr']
list1 = [i if i.isupper() else i.upper() for i in list2]
print(list1) # 结果:--->['ABC', 'EFG', 'HIJ', 'KLM', 'NOP', 'QR']
#格式四:
list1 = [(i, j) for i in range(1, 4) for j in range(1, 4)]
print(list1) # 结果:--->[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
# 小练习-按要求取元素
a = ['123', '456', 'apple', 'age', 'Faker', '927', 'hello']
list1 = [i for i in a if i.isalpha()]
print(list1) # 结果:--->['apple', 'age', 'Faker', 'hello']
list1 = [i for i in a if i.isdigit()]
print(list1) # 结果:--->['123', '456', '927']