跳转到内容

Python 入门教程/元组、列表、字典

来自 Wikibooks,开放世界中的开放书籍

上一课的内容让你头疼吗?别担心,这一课会简单一些。我们将回到一个简单的东西——变量——但更深入一些。

想想看——变量存储了一段信息。它们可以随时吐出这段信息,而且它们的信息可以随时更改。变量在它们所做的事情上很出色——存储一个可能随着时间推移而改变的信息片段。

但是如果你需要存储一个很长的信息列表,并且这个列表随着时间的推移不会改变呢?例如,一年中月份的名称。或者可能是一个很长的信息列表,它随着时间的推移而改变?例如,你所有猫的姓名。你可能会得到新的猫,有些猫可能会死,有些猫可能会跑掉。电话簿呢?为此,你需要做一些引用——你将有一个姓名列表,并且与每个姓名相关联的是一个电话号码。你怎么做呢?

解决方案 - 列表、元组和字典

[编辑 | 编辑源代码]

针对这三个问题,Python 使用了三种不同的解决方案——列表、元组和字典。

  • 列表正如它们所显示的那样——一组值。它们中的每一个都有一个编号,从零开始——第一个编号为零,第二个为 1,第三个为 2,等等。你可以从列表中删除值,并在末尾添加新值。例如:你很多猫的名字。
  • 元组就像列表,但你不能更改它们的值(在程序员术语中称为不可变)。你最初给它的值,就是你在这段程序的剩余时间里必须坚持的值。同样,每个值从零开始编号,以便于参考。例如:一年中月份的名称。
  • 字典类似于它们的名称所暗示的那样——一个字典。在一个字典中,你有一个单词的“索引”,并且每个单词都对应一个定义。在 Python 中,单词称为“键”,定义称为“值”。字典中的值没有编号——它们也没有特定的顺序——键起到相同的作用。(但是每个键必须是唯一的!)你可以添加、删除和修改字典中的值。例如:电话簿。

元组很容易创建。你给元组起一个名字,然后在其后加上它将承载的值列表。例如,一年中的月份

代码示例 1 - 创建一个元组
months = ('January','February','March','April','May','June',\
'July','August','September','October','November','December')

注意第一行末尾的“\”符号将该行代码延续到下一行。这是一种使长行更易读的有用方法。从技术上讲,你不需要在括号中添加这些括号(“(”和“)”符号),但这可以防止 Python 混淆。你可以在逗号后添加空格,如果你觉得有必要——它并不重要。然后,Python 会将这些值按顺序整理在一个方便的编号索引中——从零开始,按照你在其中输入的顺序。它将按以下方式整理

表 1 - 元组索引
索引
0 一月
1 二月
2 三月
3 四月
4 五月
5 六月
6 七月
7 八月
8 九月
9 十月
10 十一月
11 十二月

这就是元组!非常简单……

列表与元组非常相似。列表是可修改的(或者程序员可能说“可变的”),因此它们的值可以更改。大多数情况下我们使用列表,而不是元组,因为如果需要,我们希望轻松地更改值。

列表的定义与元组非常相似。假设你有五只猫,分别叫汤姆、斯内皮、基蒂、杰西和切斯特。要将它们放在一个列表中,你需要这样做

代码示例 2 - 创建一个列表
cats = ['Tom', 'Snappy', 'Kitty', 'Jessie', 'Chester']

正如你所看到的,代码与元组完全相同,除了所有值都放在方括号中,而不是圆括号中。同样,你不需要在逗号后添加空格,但它确实使它更易读。

你从列表中检索值的方 式与你在元组中完全相同。例如,要打印你第三只猫的名字,你需要这样做

代码示例 3 - 从列表中检索项目
print(cats[2])

你还可以检索一系列示例,例如上面示例中的——cats[0:2] 将返回你第一只和第二只猫,或者换句话说,该表达式将返回第零个元素和第一个元素,并将停止在第二个元素。输出将如下所示

>>> ['Tom', 'Snappy']

列表的真正用武之地在于它们如何可以被修改。要向列表添加一个值,你使用append()函数。假设你得到了一只名叫凯瑟琳的新猫。要将她添加到列表中,你需要这样做

代码示例 4 - 向列表添加项目
cats.append('Catherine')

这有点奇怪,不是吗?我会解释。该函数位于一个奇怪的位置——在一个句点之后,在列表名称之后。你将在以后的课程中更多地了解这些内容。目前,这是将新值添加到列表中的函数形式

代码示例 5 - 使用 append 函数
#add a new value to the end of a list:
list_name.append(value_to_add)

#e.g. to add the number 5038 to the list 'numbers':
numbers.append(5038)

情况更清楚了吗?很好!

现在让我们来看看一个悲伤的情况——斯内皮跑掉了。你需要从列表中删除他(或她)。幸运的是,删除那只可怜的猫是一件容易的事,所以你必须尽快摆脱悲伤

代码示例 6 - 删除一个项目
#Remove your 2nd cat, Snappy. Woe is you.
del cats[1]

你刚刚删除了列表中的第二只猫——可怜的斯内皮。

带着这个令人沮丧的信息,让我们继续学习……

好吧,生活中除了你猫的名字还有更多东西。你需要给你姐姐、母亲、儿子、水果商以及其他需要知道他们最喜欢的猫跑掉的人打电话。

现在,我们上面使用的列表并不适合电话簿。你需要根据某人的姓名来了解号码——而不是反过来,就像我们对猫所做的那样。在月份和猫的示例中,我们给计算机一个数字,它给了我们一个名字。这次,我们想要给计算机一个名字,它给我们一个数字。为此,我们需要字典。

那么我们如何创建字典呢?把你的装订设备收起来,它没有那么先进。

记住,字典有键和值。在电话簿中,你有人们的姓名,然后是他们的号码。看到相似之处了吗?

当你最初创建字典时,它非常类似于创建元组或列表。元组有(和)东西,列表有[和]东西。猜猜看!字典有{和}东西——花括号。下面是一个示例,展示了一个包含四个电话号码的字典

代码示例 7 - 创建一个字典
#Make the phone book:
phonebook = {'Andrew Parson':8806336, \
             'Emily Everett':6784346, \
             'Peter Power':7658344, \
             'Lewis Lame':1122345}

#Prints the value for the key Lewis Lame
print phonebook['Lewis Lame']

然后,程序将在屏幕上打印刘易斯·莱姆的号码。注意,我们不是通过数字来标识值,就像在猫和月份示例中一样,而是通过另一个值来标识值——在本例中是人的姓名。

好的,你创建了一个新的电话簿。现在你想向电话簿中添加新的号码。你会怎么做?一行非常简单的代码

代码示例 8 - 向字典添加条目
#Add the person 'Gingerbread Man' to the phonebook:

phonebook['Gingerbread Man'] = 1234567

# Didn't think I would give you
# my real number now, would I?

这行代码只是说在电话簿中有一个名叫姜饼人的人,他的号码是 1234567。换句话说——键是“姜饼人”,值是 1234567。

你像在列表中一样删除字典中的条目。假设安德鲁·帕森是你的邻居,并且射杀了你的猫。你再也不想和他说话了,因此不需要他的号码。就像在列表中一样,你需要这样做

代码示例 9 - 从字典中删除条目
del phonebook['Andrew Parson']

同样,非常简单。“del”运算符删除列表或字典中的任何函数、变量或条目(字典中的条目只是一个带有数字或文本字符串作为名称的变量。这在后面会派上用场。)

还记得我们对列表使用的 append 函数吗?好吧,有很多这样的函数可以与字典一起使用。下面,我将为你编写一个程序,它将包含其中的一些函数。它将附带一些注释,解释它是如何工作的。

将该程序输入 Python IDLE(你可以跳过注释)。随意尝试它。在看到以>>>开头的行的地方输入它。

代码示例 10 - 字典的函数
#A few examples of a dictionary

#First we define the dictionary
#it will have nothing in it this time
ages = {}

#Add a couple of names to the dictionary
ages['Sue'] = 23
ages['Peter'] = 19
ages['Andrew'] = 78
ages['Karren'] = 45

#Use the function has_key() - 
#This function takes this form:
#dictionary_name.has_key(key-name)
#It returns TRUE
#if the dictionary has key-name in it
#but returns FALSE if it doesn't.
#Remember - this is how 'if' statements work -
#they run if something is true
#and they don't when something is false.
if 'Sue' in ages:
    print("Sue is in the dictionary. She is", ages['Sue'], "years old")
else:
    print("Sue is not in the dictionary")

#Use the function keys() - 
#This function returns a list
#of all the names of the keys.
#E.g.
print("The following people are in the dictionary:", ages.keys())

#You could use this function to
#put all the key names in a list:
keys = ages.keys()

#You can also get a list
#of all the values in a dictionary.
#You use the values() function:
print ("People are aged the following:", ages.values())

#Put it in a list:
values = ages.values()

#You can sort lists, with the sort() function
#It will sort all values in a list
#alphabetically, numerically, etc...
#You can't sort dictionaries - 
#they are in no particular order
print(keys)
print(sorted(keys))

print(values)
print(sorted(values))

#You can find the number of entries
#with the len() function:
print ("The dictionary has", len(ages), "entries in it")
华夏公益教科书