列表存储了一系列的项目,这使得它们可以很好地跟踪事物,特别是当列表的顺序或内容可能发生变化时。列表是一种可变的数据结构,意味着你可以根据需要改变该列表。列表允许你在一个地方存储信息集,无论你只有几个项目还是成千上万的项目。你可以改变一个列表,添加新的元素,删除元素,或者根据需要替换元素。列表是可供新程序员使用的Python最强大的功能之一,它们将编程中的许多重要概念联系在一起。
如何定义一个 Python 列表
使用方括号 **[]**来定义一个列表。你可以使用逗号来分隔列表中的项目。使用复数的变量名来保存你的列表是有意义的,因为这使得代码更容易推理(理解)。
制作一个列表
foods = ['Eggs', 'Olives', 'Dairy', 'Meat', 'Chocolate']
如何访问列表元素
一个列表中的单个元素可以根据它的位置来访问,也叫索引。第一个元素的索引是0,第二个元素的索引是1,以此类推。负的索引指定从列表的末端开始的项目。要访问一个特定的元素,先写出列表的名称,然后在方括号中写出该元素的索引。
获取第一个元素
first_food = foods[0]
Eggs
获取第二个元素
second_food = foods[1]
Olives
获取最后一个元素
newest_food = foods[-1]
Chocolate
修改一个列表项
一旦定义了列表,你可以改变列表中的单个元素。你可以通过引用你想修改的项目的索引来做到这一点。
改变一个列表元素
foods[0] = 'Blueberry'
first_food = foods[0]
Blueberry
列表中的 **range()**函数
函数 **range()**函数使得以有效方式处理一组数字的工作变得容易。它的起点是 **0**开始,并在传递给它的数字下面停止一个数字。除了range()之外,你还可以使用list()函数来生成一个大的数字列表。
打印 0 到 500 的数字
for number in range(501):
print(number)
打印1到700的数字
for number in range(1, 701):
print(number)
制作一个从1到1000的数字列表
numbers = list(range(1, 1001))
最小最大值和总和
你可以使用min(),max(), 和sum() 等函数对包含数字数据的列表进行一些简单的操作。
寻找列表中的最小值
math_scores = [83, 79, 26, 47, 81, 2, 39, 79, 5, 98]
lowest = min(math_scores)
2
找出最大值
math_scores = [83, 79, 26, 47, 81, 2, 39, 79, 5, 98]
highest = max(math_scores)
98
寻找所有数值的总和
math_scores = [83, 79, 26, 47, 81, 2, 39, 79, 5, 98]
total_points_earned = sum(math_scores)
539
如何切分一个列表
你可以在一个列表中处理任何一组元素。这个列表的子集被称为切片。要对一个列表进行分割,首先是你想要的第一个项目的索引,然后加上冒号和你想要的最后一个项目后的索引。撇开第一个索引,从列表的开头开始;撇开最后一个索引,从列表的结尾开始切分。
获取前三个项目
games = ['Pokemon Sword & Shield', 'Luigis Mansion', 'Killer Queen Black', 'Dragon Quest', 'Links Awakening']
first_three = games[:3]
['Pokemon Sword & Shield', 'Luigis Mansion', 'Killer Queen Black']
获取中间的三个项目
middle_three = games[1:4]
['Luigis Mansion', 'Killer Queen Black', 'Dragon Quest']
获得最后三个项目
last_three = games[-3:]
['Killer Queen Black', 'Dragon Quest', 'Links Awakening']
将元素添加到列表中
你可以将元素添加到列表的末尾,也可以在列表的任何地方插入元素。
将元素添加到列表的末尾
foods.append('Garlic')
['Eggs', 'Olives', 'Dairy', 'Meat', 'Chocolate', 'Garlic']
从一个空的列表开始
foods = []
[]
foods.append('Onion')
foods.append('Broccoli')
foods.append('Tomato')
['Onion', 'Broccoli', 'Tomato']
在一个特定的位置插入元素
foods.insert(0, 'Pepper')
foods.insert(3, 'Lemon')
['Pepper', 'Onion', 'Broccoli', 'Lemon', 'Tomato']
从列表中删除元素
你可以通过它们在列表中的位置或者项目的值来删除元素。如果你通过它的值删除一个元素,Python 只删除具有该值的第一个元素。
通过它的位置删除一个元素
del foods[-1]
['Pepper', 'Onion', 'Broccoli', 'Lemon']
通过它的值删除一个项目
foods.remove('Onion')
['Pepper', 'Broccoli', 'Lemon']
弹出一个列表项
如果你想使用一个从列表中删除的元素,你可以把这个元素从列表中弹出来。如果你把列表看成是一个项目的堆栈。 **pop()**从堆栈的顶部取出一个元素。pop()函数返回列表中的最后一个元素,但你也可以通过指定你感兴趣的索引从列表中的任何位置弹出元素。
弹出一个列表中的最后一个项目
most_recent_food = foods.pop()
print(most_recent_food)
Lemon
弹出列表中的第一个项目
first_food = foods.pop(0)
print(first_food)
Pepper
函数 **len()**函数
要计算一个列表中的项目数,可以使用方便的**len()**函数。
查找一个列表的长度
foods = ['Eggs', 'Olives', 'Dairy', 'Meat', 'Chocolate']
num_foods = len(foods)
print(f"We have {num_foods} foods.")
We have 5 foods.
复制一个列表
要复制一个列表,从第一个项目开始到最后一个项目为止,将列表切开。如果您不使用
这种方法来复制一个列表,无论您对复制的列表做什么,都会影响到原始列表。
制作一个列表的副本
games = ['Pokemon Sword & Shield', 'Luigis Mansion', 'Killer Queen Black', 'Dragon Quest', 'Links Awakening']
copy_of_games = games[:]
print(copy_of_games)
['Pokemon Sword & Shield', 'Luigis Mansion', 'Killer Queen Black', 'Dragon Quest', 'Links Awakening']
列表的理解
你可以使用一个循环来生成一个基于数字范围或另一个列表的列表。这是一个常见的操作,所以 Python 提供了一个更有效的方法。Python 的理解力一开始可能看起来很复杂;如果是这样,请使用 for 循环的方法,直到你准备好开始使用理解力。
要写一个理解式,为你想在列表中存储的值定义一个表达式。然后写一个for循环来生成生成列表所需的输入值。
使用循环来生成一个平方数的列表
squares = []
for x in range(1, 11):
square = x ** 2
squares.append(square)
print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
使用理解力来生成一个平方数的列表
squares = [x ** 2 for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
使用一个循环将语言列表转换为大写字母
languages = ['python', 'golang', 'javascript', 'sql', 'php']
upper_languages = []
for language in languages:
upper_languages.append(language.upper())
print(upper_languages)
['PYTHON', 'GOLANG', 'JAVASCRIPT', 'SQL', 'PHP']
使用理解力将语言列表转换为大写字母
languages = ['python', 'golang', 'javascript', 'sql', 'php']
upper_languages = [language.upper() for language in languages]
['PYTHON', 'GOLANG', 'JAVASCRIPT', 'SQL', 'PHP']
如何对一个列表进行排序
列表的排序可以用 **sort()**函数对列表进行排序,它可以永久地改变列表的顺序。该 **sorted()**函数则返回一个列表的副本,而原始列表则保持不变。你可以按字母顺序对列表中的项目进行排序,也可以按字母顺序反向排序。你也可以反转列表的原始顺序。小写和大写字母可能影响排序顺序。
对列表进行永久排序
foods = ['Eggs', 'Olives', 'Dairy', 'Meat', 'Chocolate']
foods.sort()
print(foods)
['Chocolate', 'Dairy', 'Eggs', 'Meat', 'Olives']
以相反的字母顺序对列表进行永久排序
foods.sort(reverse=True)
['Olives', 'Meat', 'Eggs', 'Dairy', 'Chocolate']
暂时对列表进行排序
print(sorted(foods))
print(sorted(foods, reverse=True))
['Chocolate', 'Dairy', 'Eggs', 'Meat', 'Olives']
['Olives', 'Meat', 'Eggs', 'Dairy', 'Chocolate']
颠倒列表的顺序
foods.reverse()
['Chocolate', 'Meat', 'Dairy', 'Olives', 'Eggs']
在一个列表上循环
列表可以包含成百上千,甚至上百万的项目,所以 Python 提供了一种方法来循环浏览列表中的所有项目。当你设置一个循环时,Python 从列表中一个一个地提取每一个项目,并将其存储在一个临时变量中,你为这个变量提供一个名字。这个名字应该是列表名称的单数版本。缩进的代码块构成了循环的主体,在这里你可以处理每个单独的项目。任何没有缩进的行在循环完成后运行。
打印列表中的所有项目
for food in foods:
print(food)
Eggs
Olives
Dairy
Meat
Chocolate
为每个项目打印一条信息
for food in foods:
print(f"Eat, {food}!")
Eat, Eggs!
Eat, Olives!
Eat, Dairy!
Eat, Meat!
Eat, Chocolate!
元组--一种特殊的列表
元组与列表类似,只是一旦定义了元组,你就不能改变它的值。这就是所谓的不可变性。元组适用于存储在整个程序期间不应改变的信息。你可以用圆括号来定义元组 ().你可以覆盖整个元组,但你不能改变元组中的单个元素。
定义一个元组
measurements = (900, 500)
循环浏览一个元组
for measurement in measurements:
print(measurement)
900
500
覆写一个元组
measurements = (900, 500)
print(measurements)
measurements = (1100, 700)
print(measurements)
(900, 500)
(1100, 700)
逐步学习 Python 代码
当你第一次学习像列表这样的数据结构时,通过代码在程序中如何处理数据是有帮助的。大多数 IDE 都提供了一种方法,可以在代码执行过程中 "穿越 "它,让你看到代码在每一行的执行情况。下面的代码片段是一个很好的例子,可以用来测试PyCharm或其他IDE中的步入过程。
建立一个列表并打印列表中的项目
puppies = []
puppies.append('Winnie')
puppies.append('Mosely')
puppies.append('Bella')
puppies.append('Mugsy')
for puppy in puppies:
print(f'Hello {puppy}!')
print('I love these puppies!')
print('\nThese were my first two puppies:')
old_puppies = puppies[:2]
for old_puppy in old_puppies:
print(old_puppy)
del puppies[0]
puppies.remove('Bella')
print(puppies)

除了使用 IDE 来步入你的代码之外,你还可以使用一个很酷的网站,如Python Tutor,它可以在你的代码运行时提供一个非常有趣的图形输出。

Python 列表总结
列表是有用的数据类型,因为它们允许你写代码,在一个单一的变量中处理多个值。它们是可变的,意味着它们的内容可以改变。元组和字符串是不可变的,不能被改变。包含元组或字符串值的变量可以用一个新的元组或字符串值覆盖。这与使用append()或remove()方法在列表上修改现有值是不同的。