python的list使用进阶

£神魔★判官ぃ 2022-11-25 04:28 250阅读 0赞

列表函数&方法的对象不仅可以是字符串也可以是列表

list常用函数方法

  • append()添加列表项
    这种类似直接赋值,或者我们可以使用list[3] = ‘c’

    方法:

    list.append(obj)

    示例:

    a = [‘1’,’a’,’b’]
    a.append(‘c’)
    print(a)

当我们追加的是一个变量时我们就需要注意append的深拷贝和浅拷贝
浅拷贝:在 Python 中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用。
简单的将就是append函数只是引用了变量中的值,一旦变量的值发生变化,其列表中引用的也会发生变化.

  1. a = ['1','a','b']
  2. nums = ['2','3','4']
  3. a.append(nums)
  4. print(a)
  5. nums.pop()
  6. print(a)

一旦我们移除了最后一个元素,b发生了改变,那么a也会发生变化,这就是浅拷贝。
在这里插入图片描述

深拷贝:在 Python 中,为了使当进行赋值操作时,两个变量互不影响,可以使用 copy 模块中的 deepcopy 方法

  1. import copy
  2. a = ['1','a','b']
  3. nums = ['2','3','4']
  4. a.append(copy.deepcopy( nums ) )
  5. print(a)
  6. nums.pop()
  7. print(a)

在这里插入图片描述

  • len(list)列表元素个数
  • max(list)返回列表元素最大值
  • min(list)返回列表元素最小值
  • list(seq) list(seq)用于将元组或字符串转换为列表
    元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中
    list.append(obj)
    在列表末尾添加新的对象
  • list.count(obj)
    统计某个元素在列表中出现的次数
  • list.extend(seq)
    在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
  • list.index(obj)
    从列表中找出某个值第一个匹配项的索引位置
  • list.insert(index, obj)
    将对象插入列表
  • list.pop([index=-1])
    移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
  • list.remove(obj)
    移除列表中某个值的第一个匹配项
  • list.reverse()
    反向列表中元素
  • list.sort( key=None, reverse=False)
    对原列表进行排序
  • list.clear()
    清空列表
  • list.copy()
    复制列表

list判断语句

使用传统的方法可以通过判断list的长度进行

  1. if len(mylist):
  2. print('非空列表')
  3. else:
  4. print('The list is empty,空列表')

由于一个空 list 本身等同于 False,所以我们可以使用

  1. if mylist:
  2. print('非空列表')
  3. else:
  4. print('The list is empty,空列表')

list读取

  • 二维数组的读取

    创建一个二维数组

    list_2d = [[0 for col in range(cols)] for row in range(rows)] cols为列数,rows为行数

    list_2d = [[0 for col in range(5)] for row in range(5)]
    list_2d[0].append(1)
    list_2d[0].append(2)
    list_2d[2].append(3)
    list_2d[0].append(4)
    list_2d[0].append(5)
    print(list_2d)

在这里插入图片描述

  • 间隔读取lsit

    lsit[start:end:span]

tart:起始索引,从0开始,-1表示结束
end:结束索引
step:步长,end-start,步长为正数时,从左向右取值。步长为负数时,反向取值

  1. a = [i for i in range(0,15)]
  2. print(a[::2]) #从开始到结束,步长为2 ,从左到右
  3. print(a[:-1]) #从位置0到位置-1之前的数
  4. print(a[:-2]) #从位置0到位置-2之前的数
  5. print(a[1:5:2]) #从位置1到位置5之前的数,步长为2
  6. print(a[::-1]) #从开始到结束,步长为-1

在这里插入图片描述

list推导式书写形式

[表达式 for 变量 in 列表]
或者
[表达式 for 变量 in 列表 if 条件]

  1. li = [1,2,3,4,5,6,7,8,9]
  2. #每个结果的平方
  3. print ([x**2 for x in li])
  4. #大于5的结果的平方
  5. print ([x**2 for x in li if x>5])
  6. #转化为字典,并且将其赋值为自身的10倍
  7. print (dict([(x,x*10) for x in li]))
  8. #数组(x,y)x大于3,取2模,不取整,y为大于8
  9. print ([ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ])
  10. #两个列表对应位置相加
  11. vec=[2,4,6]
  12. vec2=[4,3,-9]
  13. sq = [vec[i]+vec2[i] for i in range(len(vec))]
  14. print (sq)
  15. #乘法表,双重循环
  16. print ([x*y for x in [1,2,3] for y in [1,2,3]])
  17. #调用函数进行赋值乘2
  18. testList = [1,2,3,4]
  19. def mul2(x):
  20. return x*2
  21. print ([mul2(i) for i in testList])
  22. #结果
  23. [1, 4, 9, 16, 25, 36, 49, 64, 81]
  24. [36, 49, 64, 81]
  25. { 1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}
  26. [(5, 9), (7, 9), (9, 9)]
  27. [6, 7, -3]
  28. [1, 2, 3, 2, 4, 6, 3, 6, 9]
  29. [2, 4, 6, 8]

判断某个列表是否是另一个列表的子列表

  1. a = ['sa1','sa5','sa8']
  2. b = ['sa1','sa5','sa8','sa10']
  3. res = set(ls1).issubset(set(ls2))
  4. print(res)
  5. True

list使用常见错误

  • list不能和str直接进行拼接
    错误显示:
    IndexError: list index out of range

    这是一种错误的写法,list不能和str拼接,否则会报错

    list = [‘sfa’,’33’,’zhang’,’san’]
    a= ‘这是列表’
    print(list+a)

  • 列表超出索引范围
    错误显示:
    IndexError: list index out of range

    例子

    a=[]
    print(a[0])

这种情况发生是因为只定义了一个空列表,没有进行任何的赋值,所以列表里什么也没有,而后面的报错也明确表示了索引超出范围,即写上的0其实是第一位值的位置,而此时是空列表没有赋值,故而报错。

  1. #解决方法:
  2. print(a[0:])

把这个列表 a 里的所有值都输出

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读