python列表

104 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天

列表

定义

  1. 空列表:[]
  2. 有内容的列表[' ',' ',' ']
  3. 其内的内容包含所有的数据类型
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
  1. 用法:remove(元素名称)
  2. 若名称不存在于这个列表中则会报错(这里可以利用in关键字进行判断元素是否存在)
  3. 若列表中存在多个相同的元素,那么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)