原文: https://www.programiz.com/python-programming/list

在本文中,我们将学习有关 Python 列表,它们如何创建,列表切片,从中添加或删除元素等所有知识。

Python 提供了一系列通常称为序列的复合数据类型。 List是 Python 中使用最频繁且用途最广泛的数据类型之一。


如何建立列表?

在 Python 编程中,通过将所有项目(元素)放在方括号[]中并用逗号分隔来创建列表。

它可以具有任意数量的项目,并且它们可以具有不同的类型(整数,浮点数,字符串等)。

  1. # empty list
  2. my_list = []
  3. # list of integers
  4. my_list = [1, 2, 3]
  5. # list with mixed data types
  6. my_list = [1, "Hello", 3.4]

一个列表也可以将另一个列表作为项目。 这称为嵌套列表。

  1. # nested list
  2. my_list = ["mouse", [8, 4, 6], ['a']]

如何访问列表中的元素?

我们可以通过多种方式访问列表的元素。

列表索引

我们可以使用索引运算符[]访问列表中的项目。 在 Python 中,索引从 0 开始。因此,包含 5 个元素的列表的索引从 0 到 4。

尝试访问除这些以外的索引将引发IndexError。 索引必须是整数。 我们不能使用float或其他类型,这将导致TypeError

使用嵌套索引访问嵌套列表。

  1. # List indexing
  2. my_list = ['p', 'r', 'o', 'b', 'e']
  3. # Output: p
  4. print(my_list[0])
  5. # Output: o
  6. print(my_list[2])
  7. # Output: e
  8. print(my_list[4])
  9. # Nested List
  10. n_list = ["Happy", [2, 0, 1, 5]]
  11. # Nested indexing
  12. print(n_list[0][1])
  13. print(n_list[1][3])
  14. # Error! Only integer can be used for indexing
  15. print(my_list[4.0])

输出

  1. p
  2. o
  3. e
  4. a
  5. 5
  6. Traceback (most recent call last):
  7. File "<string>", line 21, in <module>
  8. TypeError: list indices must be integers or slices, not float

负索引

Python 允许对其序列进行负索引。 索引 -1 表示最后一项,-2 表示倒数第二项,依此类推。

  1. # Negative indexing in lists
  2. my_list = ['p','r','o','b','e']
  3. print(my_list[-1])
  4. print(my_list[-5])

当我们运行上面的程序时,我们将得到以下输出:

  1. e
  2. p

Python 列表 - 图1

Python 中的列表索引


如何在 Python 中切片列表?

我们可以使用切片运算符:(冒号)访问列表中的一系列项目。

  1. # List slicing in Python
  2. my_list = ['p','r','o','g','r','a','m','i','z']
  3. # elements 3rd to 5th
  4. print(my_list[2:5])
  5. # elements beginning to 4th
  6. print(my_list[:-5])
  7. # elements 6th to end
  8. print(my_list[5:])
  9. # elements beginning to end
  10. print(my_list[:])

输出

  1. ['o', 'g', 'r']
  2. ['p', 'r', 'o', 'g']
  3. ['a', 'm', 'i', 'z']
  4. ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z']

通过考虑索引位于元素之间,可以最好地可视化切片,如下所示。 因此,如果要访问范围,则需要两个索引,这些索引将从列表中切出该部分。

Python 列表 - 图2

从 Python 中的列表进行元素切片


如何更改或添加元素到列表?

列表是可变的,这意味着可以更改它们的元素,而与字符串元组不同。

我们可以使用赋值运算符(=)更改一个项目或一系列项目。

  1. # Correcting mistake values in a list
  2. odd = [2, 4, 6, 8]
  3. # change the 1st item
  4. odd[0] = 1
  5. print(odd)
  6. # change 2nd to 4th items
  7. odd[1:4] = [3, 5, 7]
  8. print(odd)

输出

  1. [1, 4, 6, 8]
  2. [1, 3, 5, 7]

我们可以使用append()方法将一个项目添加到列表中,或者使用extend()方法将多个项目添加到列表中。

  1. # Appending and Extending lists in Python
  2. odd = [1, 3, 5]
  3. odd.append(7)
  4. print(odd)
  5. odd.extend([9, 11, 13])
  6. print(odd)

输出

  1. [1, 3, 5, 7]
  2. [1, 3, 5, 7, 9, 11, 13]

我们还可以使用+运算符组合两个列表。 这也称为连接。

*操作符将列表重复给定的次数。

  1. # Concatenating and repeating lists
  2. odd = [1, 3, 5]
  3. print(odd + [9, 7, 5])
  4. print(["re"] * 3)

输出

  1. [1, 3, 5, 9, 7, 5]
  2. ['re', 're', 're']

此外,我们可以使用insert()方法在所需位置插入一项,也可以通过将其压缩到列表的空切片中来插入多项。

  1. # Demonstration of list insert() method
  2. odd = [1, 9]
  3. odd.insert(1,3)
  4. print(odd)
  5. odd[2:2] = [5, 7]
  6. print(odd)

输出

  1. [1, 3, 9]
  2. [1, 3, 5, 7, 9]

如何从列表中删除或删除元素?

我们可以使用关键字del从列表中删除一个或多个项目。 它甚至可以完全删除列表。

  1. # Deleting list items
  2. my_list = ['p', 'r', 'o', 'b', 'l', 'e', 'm']
  3. # delete one item
  4. del my_list[2]
  5. print(my_list)
  6. # delete multiple items
  7. del my_list[1:5]
  8. print(my_list)
  9. # delete entire list
  10. del my_list
  11. # Error: List not defined
  12. print(my_list)

输出

  1. ['p', 'r', 'b', 'l', 'e', 'm']
  2. ['p', 'm']
  3. Traceback (most recent call last):
  4. File "<string>", line 18, in <module>
  5. NameError: name 'my_list' is not defined

我们可以使用remove()方法删除给定项,或使用pop()方法删除给定索引处的项。

如果未提供索引,则pop()方法将删除并返回最后一项。 这有助于我们将列表实现为栈(先进先出数据结构)。

我们也可以使用clear()方法清空列表。

  1. my_list = ['p','r','o','b','l','e','m']
  2. my_list.remove('p')
  3. # Output: ['r', 'o', 'b', 'l', 'e', 'm']
  4. print(my_list)
  5. # Output: 'o'
  6. print(my_list.pop(1))
  7. # Output: ['r', 'b', 'l', 'e', 'm']
  8. print(my_list)
  9. # Output: 'm'
  10. print(my_list.pop())
  11. # Output: ['r', 'b', 'l', 'e']
  12. print(my_list)
  13. my_list.clear()
  14. # Output: []
  15. print(my_list)

输出

  1. ['r', 'o', 'b', 'l', 'e', 'm']
  2. o
  3. ['r', 'b', 'l', 'e', 'm']
  4. m
  5. ['r', 'b', 'l', 'e']
  6. []

最后,我们还可以通过为元素切片分配一个空列表来删除列表中的项目。

  1. >>> my_list = ['p','r','o','b','l','e','m']
  2. >>> my_list[2:3] = []
  3. >>> my_list
  4. ['p', 'r', 'b', 'l', 'e', 'm']
  5. >>> my_list[2:5] = []
  6. >>> my_list
  7. ['p', 'r', 'm']

Python 列表方法

下面列出了 Python 编程中列表对象可用的方法。

可通过list.method()对其进行访问。 上面已经使用了某些方法。

Python 列表方法

  • append() 在列表的末尾添加元素
  • extend() - 将列表的所有元素添加到另一个列表
  • insert() - 在定义的索引处插入项目
  • remove() - 从列表中删除一个项目
  • pop() - 删除并返回给定索引的元素
  • clear() - 从列表中删除所有项目
  • index() - 返回第一个匹配项的索引
  • count() - 返回作为参数传递的项目数的计数
  • sort() - 列表中的项目以升序排序
  • reverse() - 反转列表
  • copy() - 返回列表的浅表副本

Python 列表方法的一些示例:

  1. # Python list methods
  2. my_list = [3, 8, 1, 6, 0, 8, 4]
  3. # Output: 1
  4. print(my_list.index(8))
  5. # Output: 2
  6. print(my_list.count(8))
  7. my_list.sort()
  8. # Output: [0, 1, 3, 4, 6, 8, 8]
  9. print(my_list)
  10. my_list.reverse()
  11. # Output: [8, 8, 6, 4, 3, 1, 0]
  12. print(my_list)

输出

  1. 1
  2. 2
  3. [0, 1, 3, 4, 6, 8, 8]
  4. [8, 8, 6, 4, 3, 1, 0]

列表推导式:创建新列表的优雅方式

列表推导式是从 Python 现有列表创建新列表的一种简洁明了的方法。

列表推导由方括号内的语句的表达式和组成。

这是一个列出每项增加 2 的幂的示例。

  1. pow2 = [2 ** x for x in range(10)]
  2. print(pow2)

输出

  1. [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

此代码等效于:

  1. pow2 = []
  2. for x in range(10):
  3. pow2.append(2 ** x)

列表推导可以选择包含更多的forif语句。 可选的if语句可以过滤出新列表的项目。 这里有些例子。

  1. >>> pow2 = [2 ** x for x in range(10) if x > 5]
  2. >>> pow2
  3. [64, 128, 256, 512]
  4. >>> odd = [x for x in range(20) if x % 2 == 1]
  5. >>> odd
  6. [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
  7. >>> [x+y for x in ['Python ','C '] for y in ['Language','Programming']]
  8. ['Python Language', 'Python Programming', 'C Language', 'C Programming']

Python 中的其他列表操作

列表成员资格测试

我们可以使用关键字in来测试列表中是否存在某项。

  1. my_list = ['p', 'r', 'o', 'b', 'l', 'e', 'm']
  2. # Output: True
  3. print('p' in my_list)
  4. # Output: False
  5. print('a' in my_list)
  6. # Output: True
  7. print('c' not in my_list)

输出

  1. True
  2. False
  3. True

遍历列表

使用for循环,我们可以遍历列表中的每个项目。

  1. for fruit in ['apple','banana','mango']:
  2. print("I like",fruit)

输出

  1. I like apple
  2. I like banana
  3. I like mango