初学者掌握python 列表需要知道的操作

2020-11-21 17:00 Python客栈


为了感谢大家对“Python客栈”的关注与支持,我们每天会在留言中随机抽取三位粉丝发放6.6元小红包。快来参与吧!
前些日子我们介绍了 python中基本的数据结构——元组,今天我们来看下和它相似的列表。

列表是python中内置的数据结构,它的表现形式为方括号中不同数据的集合,用逗号分隔开。列表可以用来存储相同数据类型或不同数据类型。

列表是可变的,这也是它如此常用的原因,然而在某些情况下,可变性需要特别注意。
本文介绍了一些关于python 列表的重要操作,帮助你更好的掌握列表。

一、从列表中删除元素的三种方法

del()
del可以根据索引位置,删除某个元素,也可以设定索引范围删除,亦可以删除整个列表,没有返回值

按索引下标删除单个元素
a = [1, 2, 'x', 4, 5]
del (a[0])
print (a)
# [2, 'x', 4, 5]

按索引范围删除元素
a = [1, 2, 'x', 4, 5]
del (a[0:2])
print (a)
# ['x', 4, 5]

删除整个列表中的元素
a = [1, 2, 'x', 4, 5]
del (a[:])
print (a)
# 输出空列表a[]

a = [1, 2, 'x', 4, 5]
del (a)
print (a)
# name 'a' is not defined 没有返回值,报错找不到对象

remove()
remove()用于移除列表中某个值的第一个匹配项,没有返回值
a = [1, 2, 'x', 4, 5,'x']
a.remove('x')
print (a)
# [1, 2, 4, 5, 'x']
注意:只会删除第一个匹配值,如有重复将不会删除

pop()
pop() 用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
a = [1, 2, 'x', 4, 5]
b = a.pop()
print (a)
print (b)
# [1, 2, 'x', 4]
# 5

我们可以指定删除元素的索引值,不能超过列表总长度。
a = [1, 2, 'x', 4, 5]
b = a.pop(0)
print (a)
# [2, 'x', 4, 5]



a = [1, 2, 'x', 4, 5]
b = a.pop(7)
print (a)
# 报错 pop index out of range

二、在列表中添加元素

append()
append()用于在列表末尾添加新的元素,被追加的元素在列表中保持原结构类型
a = [1, 2]
b = ('x', 'y', 'z')
a.append (b)
print (a)
# [1, 2, ('x', 'y', 'z')]

extend()
extend()用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
a = [1, 2]
b = ['x', 'y', 'z']
a.extend (b)
print (a)
# [1, 2, 'x', 'y', 'z']

insert()
insert()也用于在列表中添加新元素,但是它可以指定新元素的索引下标,例如我们可以在列表开头添加新元素。
a = [1, 2, 3, 4, 5]
a.insert(0, 'a')
print (a)
# ['a', 1, 2, 3, 4, 5]

三、用'='复制列表

我们可以复制一个列表并创建一个新的变量。
a = [1, 2, 3]
b = a
但是,新变量“ b”只是指向“ a”值的指针。因此,a的任何变化也会改变b。让我们添加一个值来确认。
a = [1, 2, 3]
b = a
a.append(4)
print (a)
print (b)
# [1, 2, 3, 4]
# [1, 2, 3, 4]

四、用切片复制列表

我们可以使用切片选择列表的所有索引来复制列表。
a = [1, 2, 3]
b = a[:]

新的列表b包含与a相同的值,但在不同的内存位置。如果我们改变a,b不会受到影响。
a = [1, 2, 3]
b = a[:]
a.append(4)
print (a)
print (b)
# [1, 2, 3, 4]
# [1, 2, 3]

五、用sort()和sorted()对列表进行排序

sort和sorted函数都可以用来对列表进行排序。

  • sort():对列表进行排序,但不返回任何内容。
  • sorted():返回列表的排序副本,但不对原始列表进行排序。

(1) sort()
a = [2, 0, 4, 3]
b = a.sort()
print (a)
print (b)
# [0, 2, 3, 4]
# None


(2) sorted
a = [2, 0, 4, 3]
b = sorted(a)
print (a)
print (b)
# [2, 0, 4, 3]
# [0, 2, 3, 4]


六、复制创建嵌套列表需要注意的

在通过复制创建一个嵌套的列表时,我们需要注意元素的变化。原列表元素的任何修改都会改变被复制的列表。复制并没有创建新的列表对象
a = [1, 2]
b = ['x', 'y']
c = [a, b]
a.append(3)
b.pop()
print (a)
print (b)
print (c)
# [1, 2, 3]
# ['x']
# [[1, 2, 3], ['x']]

列表c由列表a和列表b组成,我们通过添加和删除一个元素更新了列表a和列表b。因此,列表c也被更新了。

七、迭代过程中修改列表需要注意的

列表是可迭代的对象,因此通常在循环中使用它们。迭代基于索引,因此如果在迭代时更新列表,则需要注意。
下面的代码。 我们的需求是,如果a列表中同样的元素也位于列表b中,它将删除该项目。
a = ['x', 'y', 'z', 't']
b = ['x', 'y', 'u', 'v']
for item in a:
   if item in b:
      a.remove(item)
      print (a)
      print (b)

执行代码后,我们希望列表a变为[‘z’,‘t’]。看看实际发生了什么。
['y', 'z', 't']
['x', 'y', 'u', 'v']

为什么'y'没有被删除呢?原因是循环执行第一步删除’x'时,列表的索引会同步更新。

列表a中的a[1]索引变成了'z',for循环会比较列表中的第二个元素,比较的是'z'和‘y‘。因此'y'就没被删除


八、列表推导式(List comprehensions)

列表推导式提供了一种简明扼要的方法来创建列表。列表推导式的语法比for循环更简洁,执行效率也更高。
语法
list = [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
if不是必须的,可以省略

简单的示例,让b列表中只包含a列表的偶数元素
a = [1, 2, 4, 5, 7, 9, 11]
b = [x for x in a if x % 2 == 0]
print (b)
# [2,4]
 
等价于
for item in a:
   if item % 2 == 0:
      b.append(item)

1行代码总要比三行更简洁吧~~

九、嵌套列表中的列表推导式

我们可以在列表推导式中对嵌套列表进行迭代,比如有以下列表
vals = [[1,2,3],[4,5,2],[3,2,6]]

我们想得到嵌套列表中的每个元素,需要的输出为
vals_exp = [1,2,3,4,5,2,3,2,6]

用列表推导式来实现
vals = [[1,2,3],[4,5,2],[3,2,6]]
vals_exp = [y for x in vals for y in x]
print (vals_exp)
# [1, 2, 3, 4, 5, 2, 3, 2, 6]

如果执行流程不够明确的话,可以先尝试用for循环操作,以下是对比流程图

总结:
列表与元组的用法,结构都很类似。区别主要有

1. 列表是动态的, 长度可变, 可以随意的增加、删减或改变元素, 列表的存储空间略大于元组, 性能略差与元组

2. 元组是静态的, 长度大小固定, 不可以对元素进行增加、删减或改变操作, 元组相对于列表更加轻量级, 性能稍优


如有错误,欢迎在留言区指正,感谢阅读,希望能帮助python的初学者了解数据结构。我们将尽快更新字典与集合的相关内容。


END


往期推荐

10个示例带你掌握python中的元组

阿里云盘又双叒叕上线啦!尝鲜下载

超级小白使用pip安装第三方库的正确姿势

详尽实用的 PyCharm 教程,这篇文章值得一看


转发,点赞,在看,安排一下?
本文章转载自公众号:PythonCOO

首页 - Python 相关的更多文章: