一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天
列表
定义
- 空列表:[]
- 有内容的列表[' ',' ',' ']
- 其内的内容包含所有的数据类型
list1 = []
print(type(list1))
>>> <class 'list'>
list = ['a',1,'b',1.8,True,False,['a','b']] #定义一个有内容的列表
取出列表元素
也是通过索引来获取列表内元素
list = ['a',1,'b',1.8,True,False,['a','b']]
print(list[0])
>>> a
print(list[0:2])
>>> ['a', 1]
print(list[-2::-5])
>>> [False, 'a']
列表的添加
- 元素追加(append)
list1 = ['牛奶']
list1.append('面包')
print(list1)
>>> ['牛奶', '面包']
list2 = ['辣条','饼干']
list1.append(list2)
print(list1)
>>> ['牛奶', ['辣条', '饼干']]
- 列表拼接(extend)
list1 = ['牛奶']
list2 = ['辣条','饼干']
list1.extend(list2)
print(list1)
>>> ['牛奶', '辣条', '饼干']
print(list1+list2)
>>> ['牛奶', '辣条', '饼干']
小应用:
# 收银台
goods = [] #存放所有商品的地方
nums = 0
money = 0
sign = True
while sign == True:
name = input("请输入商品名称:")
price = input("请输入商品单价:")
number = input("请输入商品的购买数量:")
good = [name,price,number]
goods.append(good)
answer = input('按任意键继续添加(按q(Q)即可退出)')
if answer.upper() == 'Q' :
sign = False
print('*-'*20)
# 遍历所输入的所有商品
print('商品名\t单价\t数量')
for good in goods:
print('{}\t{}\t{}'.format(good[0],float(good[1]),int(good[2])))
nums += int(good[2])
money += (float(good[1])*int(good[2]))
print('商品总数:{}\t商品总价{}'.format(nums,money))
print('*-'*20)
- insert(位置,元素):元素占了位置,其他元素往后移
list = [1,2,,4,5]
list.insert(1,8) # 等于 list[1]=8
print(list)
列表的删除
pop,remove,clear:删除列表中的元素
- pop:用法为pop(index),其中的index不能越界。若括号不填内容,则自动从最后一个元素删除。
list = [1,2,3,4]
list.pop(0)
print(list)
>>> [2,3,4]
list = [1,2,3,4]
list.pop()
print(list)
>>> [1,2,3]
- remove
- 用法:remove(元素名称)
- 若名称不存在于这个列表中则会报错(这里可以利用in关键字进行判断元素是否存在)
- 若列表中存在多个相同的元素,那么remove只能删除从左到右的第一个元素(若想删除所有元素我们可以借助循环来进行伤处)
list = ['薯条','辣条','面包','牛奶','可乐']
list.remove('辣条')
print(list)
>>> ['薯条','面包','牛奶','可乐']
# 这里我们来利用in或者循环来做一段删除列表中的不存在元素的判断
# 以下是利用for循环进行的判断
list = ['薯条','辣条','面包','牛奶','可乐']
for i in list:
if i == '辣条啊':
list.remove(i)
print(list)
# 以下是利用关键字in进行判断删除的
list = ['薯条','辣条','面包','牛奶','可乐']
if '辣条啊' in list:
list.remove('辣条啊')
print(list)
else:
print('您要删除的元素不存在')
# 以下代码是利用循环来删除多个相同的元素
list = ['薯条','辣条','面包','牛奶','可乐','可乐','可乐','可乐']
n = 0
while n < len(list):
if list[n] == '可乐':
list.remove('可乐')
else:
n += 1
print(list)
- clear():直接删除列表元素
- del:进行删除操作(del删除的同时也将指针断开)
list = [1,2,3,4,5,6]
del list[3] #删除元素
print(list)
del list #删除列表
print(list)
del和clear的区别:del不仅可以删元素也可以删除这个列表,clear是清除列表中的元素
ps:题外话(内存真的是一个很有意思的东西,利用的好可以来当‘bug’使用)
eg1:
list = ['牛奶','可乐','可乐','可乐','可乐']
for i in list:
if i == '可乐':
list.remove('可乐')
print(list)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
eg2:
list = ['牛奶','可乐','可乐','可乐','可乐']
for i in list[:]:
if i == '可乐':
list.remove('可乐')
print(list)
大家可以看到以上两种非常相同的代码(ps:你们可以找一找他们的不同),这是我今天在学python的remove时遇到的问题(使用for循环的remove将列表中的相同元素删除),说实话依据python的for循环尿性我打算直接用while解决的,但写着发现一件趣事:eg1不用多说相信在学习的时候碰到这个问题的人不少(ps:为什么python中的那个变量不可改非要进行赋值呢?)但你去试试下面的那行代码(ps:哇,居然能运行)刚开始一脸懵,但细想之下发现这没啥,就是list和list[:]属于两个不同的内存,一个列表便利,一个列表执行而已(所以内存真是个有意思的东西)
列表的查找
- index(元素):只能从左往右找到第一个指定元素下标,不能找相同的元素,返回的值是元素对应的下标位置
list = [1,2,3,4,5]
weizhi = list.index(5)
list[weizhi] = 0
print(list)
- count(元素):返回列表中元素的个数,若不存在则为0
list = [1,2,3,4,5,4,3,2,3,2]
print(list.count(3))
- in和not in:利用关键字进行查找,返回bool类型的数据
题外话(内存)
list1 = [1,2,3,4,5]
list2 = list1
list2.append(3)
print(list1)
print(list2)
上面的“list1 = list2”实际上是把list1的地址赋值给了list2,所以结果两者的内容是一致的
列表的排序
- sort():这里的顺序是默认升序的,可以通过reverse参数控制升序还是降序(True升序,False降序)
list = [1,6,2,5,3,4]
list.sort()
print(list)
list.sort(reverse = False)
print(list)
- reverse():这个参数是单纯的反转(将列表的元素顺序倒过来)
list = [1,6,2,5,3,4]
list.reverse()
print(list)