Python 从入门到出家 - 列表
后知后觉 暂无评论

列表是 Python 中重要的数据结构,一般用来存储多个项在一个变量中,列表中有和字符串一样的索引结构,从左零开始,从右负一开始。

可以使用 列表变量[索引] 的形式 来取出列表中的元素。

list = ['google', 'facebook', 'twitter', 'yahoo', 'apple']
print('The second item:', list[2])

也可以使用反向索引

list = ['google', 'facebook', 'twitter', 'yahoo', 'apple']
print(list[-3])

最后输出的结果是一样的。同样的,标签也支持 [开始:结束] 形式进行截取,比如变量

list = ['google', 'facebook', 'twitter', 'yahoo', 'apple', 'microsoft', 'oracle']
/googlefacebooktwitteryahooapplemicrosoftoracle
从前面索引0123456
从后面索引-7-6-5-4-3-2-1

举个例子

print(list[2:5])
['twitter', 'yahoo', 'apple']
小贴士:输出索引从 2 开始,到索引 5 ,但是不包括 5 。

列表中可以支持多种数据种类,整型、字符串、浮点、布尔都可以存在同一个列表中。

multiple2 = ['apple', 34, True, 4.88]

使用 type() 函数可以判断类型

multiple2 = ['apple', 34, True, 4.88]
print(type(multiple2))
# 输出
<class 'list'>

修改列表

列表的大小和内容可以随意改变,在插入、删除、修改列表元素时,不会创建新的克隆变量,而是在原来的内存地址上直接修改(就地修改)。

增加元素的三种方式

使用 append() 方法

L1 = [1, 2, 3, 4]
L1.append(5)
print(L1)
# 输出
[1, 2, 3, 4, 5]

使用 insert() 方法

L2 = [1, 2, 3, 4]
L2.insert(1, 10) #(索引, 插入的值)
print(L2)
# 输出
[1, 10, 2, 3, 4]

使用 extend() 方法

L3 = [1, 2, 3, 4]
L3.extend([11, 22, 33])
print(L3)
# 输出
[1, 2, 3, 4, 11, 22, 33]
小贴士:三种方式的不同在于 append 方法在末尾插入;insert 方法可以在任意位置插入,如果手动指定的索引大于索引的总长度则默认添加到末尾;extend 方法则可以在尾部一次加入多个元素。

注意上述提到的“就地修改”问题,这个很重要,方法会直接修改变量对应的内存地址,而不会创建新的变量进行赋值。

L4 = [1, 2, 3, 4, 5]
L4 = L4.insert(6, 2)
print(L4[2])

执行上述代码即可看到报错

Traceback (most recent call last):
  File "/Users/kane/PycharmProjects/LearnPython/main.py", line 159, in <module>
    print(L[2])
TypeError: 'NoneType' object is not subscriptable

这是因为 insert 方法不会返回修改后的变量,而是返回 none ,所以在再次赋值时 L4 变量会被刷新为 none ,所以打印时会收到报错,其他几个 append() extend() 也同理。

删除也有多种方法,比较常用的是 remove() 方法

L5 = ['aa', 'bb', 'cc']
L5.remove('aa')
print(L5)
# 输出
['bb', 'cc']

另外一个方法是 pop() 方法,可以删除最后一个元素,并将元素作为方法返回值返回。

L6 = [1, 2, 3, 4, 5]
print(L6)
print(L6.pop())
print(L6)
# 输出
[1, 2, 3, 4, 5]
5
[1, 2, 3, 4]

还有一个内置方法 del 可以用来删除列表中的指定片段

L7 = ['aa', 'bb', 'cc']
del L7[1:3]
print(L7)
# 输出
['aa']

分片赋值

分片输出还可以同时进行赋值

L8 = [1, 2, 3, 4, 5, 6]
L8[1:3] = ['aa', 'bb', 'cc']
print(L8)
# 输出
[1, 'aa', 'bb', 'cc', 4, 5, 6]
小贴士:分片赋值是在原列表上删除指定的段,然后在删除的位置插入新的列表,因此列表左右两边的长度可以不等。

本地排序

使用 sort() 方法可以进行正向排序,reverse() 方法可以进行反向排序,但是只能对数字进行排序,如果元素包含字符串,会抛出报错。

L9 = [1, 5, 3, 7, 4, 2, 6]
print(L9)
L9.sort()
print(L9)
L9.reverse()
print(L9)
# 输出
[1, 5, 3, 7, 4, 2, 6]
[1, 2, 3, 4, 5, 6, 7]
[7, 6, 5, 4, 3, 2, 1]

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。