学习Python的列表

191 阅读9分钟

列表存储了一系列的项目,这使得它们可以很好地跟踪事物,特别是当列表的顺序或内容可能发生变化时。列表是一种可变的数据结构,意味着你可以根据需要改变该列表。列表允许你在一个地方存储信息集,无论你只有几个项目还是成千上万的项目。你可以改变一个列表,添加新的元素,删除元素,或者根据需要替换元素。列表是可供新程序员使用的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)

pycharm step into code

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


Python 列表总结

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