Python中最简单的数据集合是一个列表(list)。列表是方括号内用逗号分隔的任何数据项列表。通常,就像使用变量一样,使用=符号为Python列表分配名称。 如果列表中包含数字,则不要在其周围使用引号。 例如,这是测试成绩的列表:

scores = [88, 92, 78, 90, 98, 84]

如果列表中包含字符串,则应将这些字符串括在单引号或双引号中,如本例所示:

要在屏幕上显示列表的内容,可以像打印任何常规变量一样进行打印。 例如,在定义该列表后在代码中执行print(学生)会在屏幕上显示此信息。

['Mark', 'Amber', 'Todd', 'Anita', 'Sandy']

Python提供了许多很棒的方式来访问列表中的数据并根据需要显示它们。

按位置引用Python列表项

即使您看不到任何数字,列表中的每个项目也都有一个以零开头的位置编号。 您可以使用列表名称,后跟方括号的数字,按编号来引用列表中的任何项目。 换句话说,使用以下语法:

listname[x]将listname替换为您要访问的列表的名称,并将x替换为所需项的位置编号。请记住,第一个项目始终是数字0,而不是1。 例如,在下面的第一行中,我定义了一个名为“ students”的列表,然后从该列表中打印零项目。 执行代码时,结果是显示名称Mark。
students = ["Mark", "Amber", "Todd", "Anita", "Sandy"]print(students[0])Mark

阅读访问列表项目时,专业人员在数字前使用“ sub”一词。 例如,students [0]被说成是“students sub zero”。

下一个示例显示一个名为scores的列表。 print()函数打印列表中最后一个分数的位置编号,该位置编号为4(因为第一个始终为0)。

scores = [88, 92, 78, 90, 84]print(scores[4])84

如果您尝试访问一个不存在的列表项,则会收到“索引超出范围(index out of range)”错误。 索引部分是对方括号内数字的引用。 例如,下图显示的一个小实验,其中创建了scores列表,然后尝试打印score[5]。

由于没有scores[5],它失败并产生了错误。 只有scores[0],scores[1],scores[2],scores[3]和scores[4],因为列表中的第一个计数始终从零开始。


python 怎么定义一个无线列表 如何定义列表python_python 打印列表

索引超出范围错误,因为没有scores[5]。


遍历Python列表

要访问列表中的每个项目,只需使用带有以下语法的for循环:

for x in list:

将x替换为您选择的变量名,用列表名称替换list。使代码可读的一种简单方法是始终对列表名称使用复数形式(例如students,scores)。然后,您可以使用单数名称(student,score)作为变量名称。例如,以下代码将打印分数列表中的每个分数:

for score in scores:print(score)

请记住,始终缩进要在循环中执行的代码。 下图显示了一个更完整的示例。


python 怎么定义一个无线列表 如何定义列表python_python列表如何求增长率_02

遍历列表。


查看Python列表是否包含某些项目

如果希望代码检查列表的内容以查看其是否已包含某些项目,请在if语句或变量赋值的listname中使用。

例如,下图中的代码创建一个names列表。然后,两个变量存储在列表中搜索名称Anita和Bob的结果。对于名称(Anita)在列表中的变量,打印每个变量的内容均显示True。判断Bob是否在列表中的测试被证明为False。


python 怎么定义一个无线列表 如何定义列表python_python 打印列表_03

查看项目是否在列表中。


获取Python列表的长度

要确定列表中有多少项,请使用len()函数,将列表的名称放在括号内。 例如,在Python提示符键入以下代码:

students = ["Mark", "Amber", "Todd", "Anita", "Sandy"]print(len(students))

运行该代码将产生以下输出:

5

列表中确实有五项,尽管最后一项总是比数字少1,因为Python开始从零开始计数。因此,最后一个,Sandy,实际上是指students[4],而不是students[5]。

将项目追加到Python列表的末尾

当您希望Python代码将新项目添加到列表末尾时,请使用.append()方法,并将其添加到括号内。您可以在引号内使用变量名或文字值。

例如,在下图中,students.append(“ Goober”)将名称Goober添加到列表中。 students.append(new_student)会将存储在名为new_student的变量中的任何名称添加到列表中。 .append()方法始终添加到列表的末尾。因此,当您打印列表时,您会在末尾看到这两个新名称。


python 怎么定义一个无线列表 如何定义列表python_python列表如何求增长率_04

在列表末尾添加两个新名称。


您可以使用测试来查看某项是否在列表中,然后仅在该项不在列表中时再添加。 例如,下面的代码不会将名称Amber添加到列表中,因为该名称已在列表中:

student_name = "Amanda"#Add student_name but only if not already in the list.if student_name in students:    print (student_name + " already in the list")else:        students.append(student_name)    print (student_name + " added to the list")

将项目插入Python列表

append()方法允许您将项目添加到列表的末尾,insert()方法允许您将项目添加到列表的任何位置。 insert()的语法是

listname.insert(position, item)

将listname替换为列表名称,将position替换为要插入项目的位置(例如,0使其成为第一个项目,1使其成为第二个项目,依此类推)。 将项目替换为要放入列表中的值或包含该值的变量的名称。

例如,以下代码使Lupe成为列表中的第一项:

#Create a list of strings (names).students = ["Mark", "Amber", "Todd", "Anita", "Sandy"]student_name = "Lupe"# Add student name to front of the list.students.insert(0,student_name)#Show me the new list.print(students)

如果运行代码,则在插入新名称后,print(students)将显示列表,如下所示:

['Lupe', 'Mark', 'Amber', 'Todd', 'Anita', 'Sandy']

更改Python列表中的项目

就像使用变量一样,您可以使用=赋值运算符来更改列表中的项目。只要确保将索引号包括在要更改的项目的方括号中即可。语法为:

listname [index] = newvalue

将listname替换为列表名称;用您要更改的项目的下标(索引号)替换索引;并将newvalue替换为要放入列表项的任何值。例如,看下面的代码:

#Create a list of strings (names).students = ["Mark", "Amber", "Todd", "Anita", "Sandy"]students[3] = "Hobart"print(students)

运行此代码时,输出如下,因为Anita的名称已更改为Hobart。

['Mark', 'Amber', 'Todd', 'Hobart', 'Sandy']

合并Python列表

如果要将两个列表合并为一个列表,请使用带有以下语法的extend()函数:

original_list.extend(additional_items_list)

在您的代码中,将original_list替换为要在其中添加新列表项的列表的名称。 将additional_items_list替换为包含要添加到第一个列表的项目的列表名称。

这是一个使用名为list1和list2的列表的简单示例。执行list1.extend(list2)之后,第一个列表包含两个列表中的项目,如您在最后的print()语句的输出中所见。

# Create two lists of Names.list1 = ["Zara", "Lupe", "Hong", "Alberto", "Jake"]list2 = ["Huey", "Dewey", "Louie", "Nader", "Bubba"]# Add list2 names to list1.list1.extend(list2)# Print list 1.print(list1)['Zara', 'Lupe', 'Hong', 'Alberto', 'Jake', 'Huey', 'Dewey', 'Louie', 'Nader', 'Bubba']

删除Python列表项

Python提供了remove()方法,因此您可以从列表中删除任何值。如果该项目多次在列表中,则仅删除第一个匹配项。例如,以下代码显示了一个字母列表,其中字母C重复了几次。代码使用letters.remove(“ C”)从列表中删除字母C:

# Remove "C" from the list.letters.remove("C")#Show me the new list.print(letters)

当您实际执行此代码并打印列表时,您会看到仅删除了第一个字母C:

['A', 'B', 'D', 'C', 'E', 'C']

如果您需要删除所有项目,则可以使用while循环重复.remove,只要该项目仍保留在列表中即可。例如,只要“ C”仍在列表中,此代码就会重复.remove。

#Create a list of strings.letters = ["A", "B", "C", "D", "C", "E", "C"]

如果要根据项目在列表中的位置删除项目,请使用带索引号的pop()而不是带值的remove()。 如果要从列表中删除最后一项,请使用没有索引号的pop()。

例如,以下代码创建一个列表,一行删除第一项(0),另一行删除最后一项(pop()括号中没有任何内容)。 打印列表显示这两项已被删除:

#Create a list of strings.letters = ["A", "B", "C", "D", "E", "F", "G"] #Remove the first item.letters.pop(0)#Remove the last item.letters.pop() #Show me the new list.print(letters)

运行代码表明,删除第一个和最后一个项目确实有效:

['B', 'C', 'D', 'E', 'F']

当pop()列表中的某个项目时,可以将该值的副本存储在某个变量中。例如,此图像显示与上面相同的代码。但是,它将删除的内容的副本存储在名为first_removed和last_removed的变量中。最后,它会打印Python列表,并显示已删除的字母。


python 怎么定义一个无线列表 如何定义列表python_python 打印列表_05

使用pop()删除列表项。


Python还提供了del命令,该命令根据索引号(位置)从列表中删除任何项目。 但是同样,您必须记住,第一项为0。 因此,假设您运行以下代码以从列表中删除商品索引2:

# Create a list of strings.letters = ["A", "B", "C", "D", "E", "F", "G"] # Remove item sub 2.del letters[2] print(letters)

运行该代码将再次显示该列表,如下所示。 字母C已被删除,这是要删除的正确项目,因为字母的编号为0、1、2、3等。

['A', 'B', 'D', 'E', 'F', 'G']

您也可以使用del删除整个列表。 只是不要使用方括号和索引号。 例如,您在下面看到的代码创建一个列表,然后将其删除。 删除后尝试打印列表会导致错误,因为在执行print()语句时列表不再存在。


python 怎么定义一个无线列表 如何定义列表python_python 打印列表_06

删除列表然后尝试打印它会导致错误。


清除Python列表

如果要删除列表的内容而不是列表本身,请使用.clear()。 该列表仍然存在; 但是,它不包含任何项目。 换句话说,这是一个空列表。 以下代码显示了如何进行测试。运行代码的末尾显示[],可让您知道列表为空:

# Create a list of strings.letters = ["A", "B", "C", "D", "E", "F", "G"] # Clear the list of all entries.letters.clear() # Show me the new list.print(letters)
[]

计算项目在Python列表中出现的次数

您可以使用Python count()方法计算项目在列表中出现的次数。 与其他列表方法一样,语法很简单:

listname.count(x)

将listname替换为列表名称,将x替换为要查找的值(或包含该值的变量的名称)。

下图中的代码使用.count()括号内的文字B来计算字母B在列表中出现的次数。 相同的代码也计算C级的数量,但是该值存储在变量中只是为了显示语法上的差异。 正如您在底部的程序输出中所看到的,这两种计数均有效。 添加了一个以计算F的数量,而不使用任何变量。 F在显示消息的代码中被正确计数。 没有F等级,因此返回零,如您在输出中看到的。


python 怎么定义一个无线列表 如何定义列表python_python 怎么定义一个无线列表_07

计数列表中的项目。


当尝试将数字和字符串组合成一条消息时,请记住,您必须使用str()函数将数字转换为字符串。 否则,您将收到一条错误消息,内容为只能将str(而不是“ int”)连接到str。在该消息中,int是整数的缩写,而str是字符串的缩写。

查找Python列表项的索引

Python提供了一个.index()方法,该方法根据索引号返回一个数字,该数字指示索引项在列表中的位置。语法为:

listname.index(x)

将listname替换为要搜索的列表的名称。 将x替换为您要查找的内容(以文字或变量名形式)。当然,我们无法保证该项目在列表中,即使存在,也无法保证该项目仅在列表中一次。如果该项目不在列表中,则会发生错误。 如果该项目多次在列表中,则返回第一个匹配项目的索引。

下图显示了一个示例,其中该程序在f_index = grades.index(look_for)行崩溃,因为列表中没有F。


python 怎么定义一个无线列表 如何定义列表python_python 打印列表_08

试图查找不存在的列表项的索引时程序失败。


解决这个问题的一个简单方法是使用if语句查看一个项是否在列表中,然后再尝试获取其索引号。如果该项不在列表中,则显示一条消息。否则,获取索引号并将其显示在消息中。代码如下:

# Create a list of strings.grades = ["C", "B", "A", "D", "C", "B", "C"]# Decide what to look forlook_for = "F"# See if the item is in the list.if look_for in grades:    # If it's in the list, get and show the index.    print(str(look_for) + " is at index " + str(grades.index(look_for)))else:    # If not in the list, don't even try for index number.    print(str(look_for) + " isn't in the list.")

按字母顺序排列和排序Python列表

Python提供了sort()方法来对列表进行排序。它以最简单的形式按字母顺序排列列表中的项目(如果它们是字符串)。如果列表中包含数字,则按照从小到大的顺序对它们进行排序。对于像这样的简单排序,只需在带空括号的情况下使用sort()即可:

listname.sort()

将listname替换为列表名称。下图显示了一个使用字符串列表和数字列表的示例。 在该示例中,只需将每个已排序的列表分配给新的列表名称,就可以为每个列表创建一个新列表。 然后,代码将打印每个已排序列表的内容。


python 怎么定义一个无线列表 如何定义列表python_python 打印列表_09

排序字符串和数字。


如果列表中包含大小写字母混合的字符串,并且排序结果看起来不正确,请尝试将.sort()替换为.sort(key = lambda s:s.lower()),然后再次运行代码。

日期有点棘手,因为您不能只将它们作为字符串输入,例如“ 12/31/2020”。 它们必须是日期数据类型才能正确排序。这意味着使用datetime模块和date()方法来定义每个日期。您可以像其他任何列表一样将日期添加到列表中。例如,在下面的代码行中,该代码创建了一个包含四个日期的列表,并且该代码非常完美。

dates = [dt.date(2020,12,31), dt.date(2019,1,31), dt.date(2018,2,28), dt.date(2020,1,1)]

如果您以此方式创建列表,计算机当然不会介意。 但是,如果您想使代码对自己或其他开发人员更具可读性,则可能希望一次创建并附加每个日期,这样就可以更轻松地了解正在发生的事情,因此您不必在一行代码中处理这么多逗号。 下图显示了一个示例,其中创建了一个名为datelist的空列表:

datelist = []


python 怎么定义一个无线列表 如何定义列表python_python列表如何求增长率_10

以一种不错的格式对日期进行排序和显示。


然后使用dt.date(year,month,day)语法将一个日期一次附加到列表中。

创建列表后,代码使用datelist.sort()将它们按时间顺序排序(最早到最新)。 您无需在该代码中使用print(datelist),因为该方法将显示包含数据类型信息的日期,例如:

[datetime.date(2018, 2, 28), datetime.date(2019, 1, 31), datetime.date (2020, 1, 1), datetime.date(2020, 12, 31)]

不是最容易阅读的列表。 因此,您可以遍历列表中的每个日期,而不用一个print()语句打印整个列表,并打印每个使用f字符串%m /%d /%Y格式化的日期。 如上图底部所示,它以mm / dd / yyyy 格式在每个行上显示每个日期。

如果您想按相反的顺序对项目进行排序,请在sort()括号内放入reverse = True(并且不要忘记将首字母大写)。 下图显示了使用reverse = True对三个列表进行降序排列的示例。


python 怎么定义一个无线列表 如何定义列表python_python 怎么定义一个无线列表_11

以相反的顺序对字符串,数字和日期进行排序。


反转Python列表

您还可以使用.reverse方法反转列表中项目的顺序。这与反向排序不同,因为当您反向排序时,您实际上仍在排序:Z–A表示字符串,数字的最大到最小,日期的最早到最早。 反转列表时,您只需反转列表中的项目(无论其顺序如何),而无需尝试以任何方式对它们进行排序。

下面的代码显示了一个示例,其中您可以颠倒列表中名称的顺序,然后打印列表。 输出显示列表项与原始顺序相反:

# Create a list of strings.names = ["Zara", "Lupe", "Hong", "Alberto", "Jake"]# Reverse the listnames.reverse()# Print the listprint(names) ['Jake', 'Alberto', 'Hong', 'Lupe', 'Zara']

复制Python列表

如果您需要使用列表的副本,请使用.copy()方法,以免更改原始列表。 例如,下面的代码与前面的代码相似,不同之处在于,您制作了一个列表副本并反转了该列表,而不是反转原始列表的顺序。打印每个列表的内容将显示第一个列表仍保持原始顺序,而第二个列表则相反:

# Create a list of strings.names = ["Zara", "Lupe", "Hong", "Alberto", "Jake"] # Make a copy of the listbackward_names = names.copy()# Reverse the copybackward_names.reverse() # Print the listprint(names)print(backward_names) ['Zara', 'Lupe', 'Hong', 'Alberto', 'Jake']['Jake', 'Alberto', 'Hong', 'Lupe', 'Zara']