列表

Python
作者

yangjh

发布日期

November 23, 2022

Python的列表(list) 对象是最常用的序列(Sequence)。与字符串是不可变序列不同,列表是可变的。可通过对偏移量进行修改和读取。

创建列表

创建列表的方式

  • 使用[],例如 list1 = [2, 3, 4]
  • 使用list()函数(也叫构造函数),例如list1 = list(2, 3, 4)
  • 使用列表推导式,[x for x in iterable if condition]

使用列表推导式创建列表的案例

>>> [i for i in range(20)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> [i for i in range(40) if i%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
>>> [i*2 for i in range(20)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
>>> [i+j for i in range(5) for j in range(5)]
[0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8]
>>> [i+j for i in range(10) for j in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6,
 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11,
 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14,
 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16,
 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
>>> {i+j for i in range(10) for j in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}
>>> [(i,j,k) for i in 'abc' for j in range(2) for k in range(2)]
[('a', 0, 0), ('a', 0, 1), ('a', 1, 0), ('a', 1, 1), ('b', 0, 0), ('b', 0, 1),
 ('b', 1, 0), ('b', 1, 1), ('c', 0, 0), ('c', 0, 1), ('c', 1, 0), ('c', 1, 1)]
>>> [chr(i) for i in range(97,123)]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
>>> {i:ord(i) for i in [chr(i) for i in range(97,123)]}
{'a': 97, 'b': 98, 'c': 99, 'd': 100, 'e': 101, 'f': 102, 'g': 103, 'h': 104,
 'i': 105, 'j': 106, 'k': 107, 'l': 108, 'm': 109, 'n': 110, 'o': 111, 'p': 112,
 'q': 113, 'r': 114, 's': 115, 't': 116, 'u': 117, 'v': 118, 'w': 119, 'x': 120,
 'y': 121, 'z': 122}
>>> dic={i:ord(i) for i in [chr(i) for i in range(97,123)]}
>>> dic['x']
120

遍历列表

遍历列表的方式

  1. for item in list
  2. for item in iter(list)
  3. for index in range(len(list))
  4. for index,value in enumerate(list)

使用for item in list遍历列表

lis = ["Hello", 'everyone', 2022]
for item in lis:
    print(F"Item = {item}")
"""
Item = Hello
Item = everyone
Item = 2022
"""

使用for index in range(len(list))遍历列表

lis = ["Hello", 'everyone', 2022]
for index in range(len(lis)):
    print(F"index = {index}, Item = {lis[index]}")
"""
index = 0, Item = Hello
index = 1, Item = everyone
index = 2, Item = 2022
"""

使用for index, value in enumerate(lis)遍历列表

lis = ["Hello", 'everyone', 2022]
for index, value in enumerate(lis):
    print("index =", index, "value =", value)
"""
index = 0 value = Hello
index = 1 value = everyone
index = 2 value = 2022
"""

使用for value in iter(lis)遍历列表

lis = ["Hello", 'everyone', 2022]
for value in iter(lis):
    print("value =", value)
"""
value = Hello
value = everyone
value = 2022
"""

增加列表元素

增加列表的方法有多种,常见的有insertappendextend+运算等等。

使用insert方法在指定位置插入列表元素

a = [1, 2, 3]
a.insert(2, 2.5)
print(a)
"""
[1, 2, 2.5, 3]
"""

insert方法用于将对象插入到列表中,例如:运行结果为[1, 2, 2.5, 3]insert方法的两个参数值很好理解,第一个参数为在哪个元素后插入,表示位置,第二个参数为插入的内容。

使用append方法在列表尾部增加新元素

code = [1, 2, 3]
code.append(4)
print(code)
"""
[1, 2, 3, 4]
"""

使用extend方法在列表尾部增加多个值

a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
"""
[1, 2, 3, 4, 5, 6]
"""

一次性追加另一个序列中的多个值,以上代码将把b列表追加到a列表中,打印出的a列表的值为[1, 2, 3, 4, 5, 6]。和序列加运算不同,extend方法将改变原有列表的内容,而加运算却不会。

使用序列加运算生成新的列表

b = [4, 5, 6]
c = b + [7, 8, 9]
print(b)
"""
[4, 5, 6]
"""
print(c)
"""
[4,5,6,7,8,9]
"""

使用分片赋值插入元素

name = list('Python')
name[1:1] = list('--')
print(name)
"""
['P', '-', '-', 'y', 't', 'h', 'o', 'n']
"""

删除列表元素

使用del语句删除列表元素

list1 = [1, 2, 3, 4, 5]
del list1[3:]
print(list1)
del list1[0]
print(list1)
"""
[1, 2, 3]
[2, 3]
"""

使用pop方法删除列表指定元素

pop方法会移除列表中的一个元素并且返回该元素的值。pop方法默认删除为最后一个,和append方法刚好相反。

a = [1, 2, 3]
print(a.pop())
print(a)

使用remove方法查找并删除列表元素

code = ['to', 'be', 'or', 'not', 'to', 'be']
print(code.remove('or'))
print(code)
"""
None
['to', 'be', 'not', 'to', 'be']
"""

remove方法并不返回匹配到的内容。

修改列表的值

可通过赋值语句与其他表达式的组合,修改列表的值。

修改单个元素的值

a = [2, 2, 2]
a[1] = 1
print(a)
"""
[2, 1, 2]
"""

列表可通过索引对其对应的元素进行赋值,从而改变列表的内容。通过上述代码的运行,我们可以看到列表确实是可以改变的。

修改列表中多个元素的值

>>> name = list('Python')
>>> print(name)
['P', 'y', 't', 'h', 'o', 'n']
>>> name[2:] = list('data')
>>> print(name)
['P', 'y', 'd', 'a', 't', 'a']

分片赋值可以一次为多个元素赋值,并且不用考虑原列表的长度是否和新的列表长度一致。

{{< include _列表常用内置方法.qmd >}}

将列表当做堆栈使用

列表方法使得列表可以很方便的做为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用append()方法可以把一个元素添加到堆栈中。用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。

例如:

stack = [3, 4, 5]
stack.append(6)
stack.append(7)
stack

[3, 4, 5, 6, 7]

stack.pop()    #后进先出

7

参考文献

  1. 内置类型 — Python 3.10.7 文档
回到顶部