目录
介绍
列表
元组
负索引和切片
解构
循环
结论
- 下载源1.3 KB
这是我们系列中的第二个模块,可帮助您了解Python及其在机器学习(ML)和人工智能(AI)中的使用。
既然您已经了解了Python的一些基本知识,这些知识已在第一个模块中进行了讨论,那么我们可以更深入地了解列表和元组数据结构,并了解如何使用它们。
列表列表是项目的集合。列表是可变的:您可以更改其元素和大小。因此,它们类似于C#中的List,Java中的ArrayList和JavaScript中的数组。
您可以分配一个这样的列表,然后通过其从零开始的索引访问其元素:
foo = [1, 2, True, "mixing types is fine"]
print(foo[0]) # 1
foo[0] = 3
print(foo[0]) # 3
append方法在列表的末尾添加一个元素。insert方法将元素放置在您指定的索引处:
foo = [1, 2, 3]
foo.append(4)
print(foo) # [1, 2, 3, 4]
foo.insert(0, 0.5)
print(foo) # [0.5, 1, 2, 3, 4]
要删除索引中的元素,请使用del关键字:
del foo[2]
print(foo) # [0.5, 1, 3, 4]
元组
元组是项目集合的另一种类型。元组与列表类似,但是它们是不可变的。元组的分配如下:
foo = 1, 2, True, "you can mix types, like in lists"
您经常会看到元组的格式为(1, 2, "a"),并带有括号。元组值周围的括号用于帮助提高可读性,或者在上下文相关的情况下(如果需要)。例如,1, 2 + 3, 4表示的含义与(1, 2) + (3, 4)!不同。第一个表达式返回一个元组,(1, 5, 4)而第二个表达式返回(1, 2, 3, 4)。
从元组获取值的方式与从列表foo[index]获取值的方式相同,其中index表示元素的从零开始的索引。如果尝试更改以下元素之一,则可以看到元组是不可变的:
foo[0] = 3 # will raise a TypeError
这对于列表很有效,但对于元组则不行。
元组也没有添加、删除和其他一些方法。
您还可以从函数返回元组,这是一种常见的做法:
def your_function():
return 1, 2
这将返回一个元组(1, 2)。
如果要只包含一个元素的元组,请在该元素后添加逗号:
foo = 1,
负索引和切片
Python的索引比我到目前为止展示的强大。它们提供了C#,Java等不存在的某些功能。一个示例是负索引,其中-1表示最后一个元素,-2表示倒数第二个元素,依此类推。
my_list = [1, 2, 3]
print(my_list[-1]) # 3
这适用于列表和元组。
另外,您可以通过指定切片的开始、结束或开始和结束元素的索引来获取列表或元组的切片。这将生成带有元素子集的新列表或元组。以下是一些示例来说明:
my_list = [0, 1, 2, 3, 4, 5]
print(my_list[1:2]) # [1, 2]
print(my_list[2:]) # [2, 3, 4, 5]
print(my_list[:2]) # [0, 1]
print(my_list[0:4:2]) # [0, 2]
print(my_list[-3:-1]) # [3, 4]
print(my_list[::-1]) # [5, 4, 3, 2, 1, 0]
切片符号为[start:stop:step]。如果start保持为空,则默认为0。如果end保持空白,则表示列表的末尾。:step符号是可选的。因此::-1表示“从0到步骤-1,从列表的末尾开始”,并因此返回相反的列表。
切片永远不会提高IndexErrors。当超出范围时,它们只是返回一个空列表。
解构假设您有一个具有已知数量的元素的元组(或列表),例如三个。并假设您宁愿有三个不同的变量,每个元组元素一个。
Python提供了一种称为解构(或解包)的功能,以单行将集合分解:
my_tuple = 1, 2, 3
a, b, c = my_tuple
现在a = 1,b = 2和c = 3。
这也适用于列表:
my_list = [1, 2, 3]
a, b, c = my_list
这在处理返回元组的函数时非常有用,Python生态系统中还有很多这样的函数,以及与AI相关的库进行处理时。
您可能熟悉三种循环:for,foreach和while。Python仅提供while和foreach循环(它使用for关键字!)。不用担心。正如我们将在后面看到的,创建一个行为完全类似于for循环的循环非常容易。
这是一个遍历列表的Python循环:
fruits = ["Apple", "Banana", "Pear"]
for fruit in fruits:
print(fruit)
您还可以遍历元组:
fruits = "Apple", "Banana", "Pear"
for fruit in fruits:
print(fruit)
通常,您可以在每个迭代器上使用for循环。迭代器以及如何创建自己的迭代器,将在以后的文章中更深入地讨论。
如果要使用C样式的for循环而不是foreach循环,则可以循环range函数的结果,该结果将返回一个范围内的迭代器:
for i in range(10):
print(i)
最后打印的数字为9。这等效于以下C代码片段:
for (int i = 0; i < 10; i++) {
Console.WriteLine(i);
}
range函数提供的不仅仅是从零到给定数字的计数。您可以使用range(x, 10),其中x将第一个数组元素指定为其他起始编号。您可以使用第三个参数指定步长,例如range(0, 10, 2)。
创建从高到低的范围是这样的:range(10, 0, -1)。现在,第一个元素将为10,最后一个元素将为1。的确,range(0, 10)它不是range(10, 0, -1)的反向,因为第二个参数将不包含在范围内。
Python中的while循环看起来与您已经知道的非常相似:
while condition:
# code
Python还提供了break和Continue语句,它们的工作方式与C#,Java,JavaScript和许多其他语言中的完全相同。
while True:
if input() == "hello":
break
结论
在本模块中,我们研究了Python中的列表和元组,并了解了索引、解构和循环的知识。在接下来的文章中,我们将谈论生成器和类。