列表和元组
列表(list)简介
1 列表是什么
列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字 0~9 或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。 列表通常包含多个元素,因此给列表指定一个表示复数的名称(如 letters、digits 或 names) 是个不错的主意。
在 Python 中,用方括号([]
)表示列表,并用逗号分隔其中的元素。下面是一个简单的列 表示例,其中包含几种自行车:
bicycles = ['trek','cannondale','redline','specailized']
print(bicycles)
#['trek', 'cannondale', 'redline', 'specialized']
如果让 Python 将列表打印出来,Python 将打印列表的内部表示,包括方括号。
1.1 访问列表元素
列表是有序集合,因此要访问列表的任意元素,只需将该元素的位置(索引)告诉 Python 即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将后者放在方括号内。 例如,下面的代码从列表 bicycles 中提取第一款自行车:
bicycles = ['trek','cannondale','redline','specailized']
print(bicycles[0])
#trek
1.2 索引从0
而不是1
开始
在 Python 中,第一个列表元素的索引为 0,而不是 1。大多数编程语言是如此规定的,这与 列表操作的底层实现相关。
第二个列表元素的索引为 1。根据这种简单的计数方式,要访问列表的任何元素,都可将其 位置减 1,并将结果作为索引。例如,要访问第四个列表元素,可使用索引 3。
下面的代码访问索引 1 和索引 3 处的自行车:
bicycles = ['trek','cannondale','redline','specailized']
print(bicycles[1])
#cannondale
print(bicycles[3])
#specailized
Python 为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让 Python 30 第 3 章 列表简介 返回最后一个列表元素:
bicycles = ['trek','cannondale','redline','specailized']
print(bicycles[-1])
#specailized
这段代码返回'specialized'。这种语法很有用,因为你经常需要在不知道列表长度的情况 下访问最后的元素。这种约定也适用于其他负数索引。例如,索引-2 返回倒数第二个列表元素, 索引-3 返回倒数第三个列表元素,依此类推。
1.3 使用列表中的各个值
你可以像使用其他变量一样使用列表中的各个值。例如,可以使用 f 字符串根据列表中的值 来创建消息。
下面尝试从列表中提取第一款自行车,并使用这个值创建一条消息:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."
print(message)
#My first bicycle was a Trek.
2 修改、添加和删除元素
2.1 修改列表元素
修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改 的元素的索引,再指定该元素的新值。
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
#['honda', 'yamaha', 'suzuki']
motorcycles[0] = 'ducati'
print(motorcycles)
#['ducati', 'yamaha', 'suzuki']
通过这种方法你可以修改任意列表元素的值,而不仅仅是第一个元素的值。
2.2 在列表中添加元素
2.2.1 在列表末尾添加元素
语法
list.append(value)
#元素value将被添加到list的末尾
在列表中添加新元素时,最简单的方式是将元素附加(append
)到列表。给列表附加元素时, 它将添加到列表末尾。继续使用前一个示例中的列表,在其末尾添加新元素'ducati':
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
#['honda', 'yamaha', 'suzuki']
motorcycles.append('ducati')
print(motorcycles)
#['honda', 'yamaha', 'suzuki', 'ducati']
方法 append()让动态地创建列表易如反掌。例如,你可以先创建一个空列表,再使用一系列 函数调用 append()来添加元素。下面来创建一个空列表,再在其中添加元素'honda'、'yamaha' 和'suzuki':
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
#['honda', 'yamaha', 'suzuki']
2.2.2 在列表中插入元素
语法
list.insert(index,value)
index
:索引,元素将插入到指定索引。value
:要插入的元素。
使用方法 insert()可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)
#['ducati', 'honda', 'yamaha', 'suzuki']
2.3 从列表中删除元素
2.3.1 使用del语句删除元素
del list[index]
#删除指定位置的元素
使用 del 语句将值从列表中删除后,你就无法再访问它了。
2.3.2 使用方法pop()删除元素
有时候,你要将元素从列表中删除,并接着使用它的值。例如,你可能需要获取刚被射杀的 外星人的 x 坐标和 y 坐标,以便在相应的位置显示爆炸效果;在 Web 应用程序中,你可能要将用 户从活跃成员列表中删除,并将其加入到非活跃成员列表中。
方法 pop()删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比: 列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
pop()
方法有一个返回值,返回被弹出的元素,可以用一个变量来接收。
list1 = [1,2,3,4,5,6,7,8,9]
popped_num = list1.pop()
print(popped_num)
#9
print(list1)
#[1,2,3,4,5,6,7,8]
2.3.3 弹出列表中任何位置的元素
实际上,可以使用 pop()来删除列表中任意位置的元素,只需在圆括号中指定要删除元素的 索引即可。
list1 = [1,2,3,4,5,6,7,8,9]
popped_num = list1.pop(5)
print(popped_num)
#6
print(list1)
#[1,2,3,4,5,7,8,9]
2.3.4 根据值删除元素
list1 = [1,2,3,4,5,6,7,8,9]
list1.remove(5)
print(list1)
#[1,2,3,4,7,8,9]
有时候,你不知道要从列表中删除的值所处的位置。如果只知道要删除的元素的值,可使用 方法 remove()。
但是当一个列表中有多个值相同的时候remove()
只会删除掉位置靠前,也就是索引值最小的那个。如果想要全部删除,就需要使用循环来确保将每个值都删除。
当你想删除一个值,但是后面还需要用到的时候,可以借用一个变量来存储这个值,如下:
list1 = [1,2,3,4,5,6,7,8,9]
remove_num = 5
list1.remove(remove_num)
print(list1)
#[1,2,3,4,7,8,9]
print(remove_num)
#5
3 组织列表
3.1 sort()方法对列表永久排序
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
nums.sort()
print(nums)
#[1, 2, 3, 5, 6, 7, 8, 9, 42]
sort()
方法默认升序排列,如果需要降序排列,只需向 sort()方法传递参数reverse=True
即可。
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
nums.sort(reverse=True)
print(nums)
#[42, 9, 8, 7, 6, 5, 3, 2, 1]
同时,sort()
方法是一个修改列表的方法,它会改变原列表。
3.2 函数sorted()对列表临时排序
函数sorted()
会对列表进行排序并返回排序后的结果,但是不会改变原来的列表。
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
asc_nums = sorted(nums)
print(asc_nums)
#[1, 2, 3, 5, 6, 7, 8, 9, 42]
print(nums)
#[5, 6, 9, 42, 1, 2, 3, 8, 7]
也可向函数 sorted()传递参数 reverse=True,得到相反顺序的列表。
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
asc_nums = sorted(nums,reverse=True)
print(asc_nums)
#[42, 9, 8, 7, 6, 5, 3, 2, 1]
print(nums)
#[5, 6, 9, 42, 1, 2, 3, 8, 7]
3.3 倒着打印列表
要反转列表元素的排列顺序,可使用方法 reverse()
。
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
nums.reverse()
print(nums)
#[7, 8, 3, 2, 1, 42, 9, 6, 5]
方法 reverse()
永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,只需 对列表再次调用 reverse()
即可。
3.4 确定列表的长度
使用函数 len()
可快速获悉列表的长度。
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
nums_len = len(nums)
print(nums_len)
#9
list1 = ['a', 'd', 'c', 6, 9, 3]
list1_len = len(list1)
print(list1_len)
#6
操作列表
1 遍历整个列表
使用for
循环来打印列表中所有元素:
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
for num in nums:
print(num)
#5
#6
#9
#42
#1
#2
#3
#8
#7
1.1 在for循环中执行更多操作
nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
for num in nums:
print(f"2 * {num} = {2 * num}")
#2 * 5 = 10
#2 * 6 = 12
#2 * 9 = 18
#2 * 42 = 84
#2 * 1 = 2
#2 * 2 = 4
#2 * 3 = 6
#2 * 8 = 16
#2 * 7 = 14
2 创建数值列表
列表非常适合用于存储数字集合,而 Python 提供了很多工具,可帮助你高效地处理数字列 表。明白如何有效地使用这些工具后,即便列表包含数百万个元素,你编写的代码也能运行得 很好。
2.1 使用range()函数
Python 函数 range()
让你能够轻松地生成一系列数。例如,可以像下面这样使用函数 range() 来打印一系列数:
nums = range(1,10)
for num in nums:
print(num)
#1
#2
#3
#4
#5
#6
#7
#8
#9
调用函数 range()
时,也可只指定一个参数,这样它将从 0 开始。例如,range(6)返回数 0~5。
nums = range(6)
for num in nums:
print(num)
#0
#1
#2
#3
#4
#5
2.2 使用range()创建数字列表
要创建数字列表,可使用函数 list()将 range()的结果直接转换为列表。如果将 range()作 为 list()的参数,输出将是一个数字列表。
nums = list(range(1,5))
print(nums)
#[1, 2, 3, 4]
使用函数 range()时,还可指定步长。为此,可给这个函数指定第三个参数,Python 将根据 这个步长来生成数。
例如,下面的代码打印 1~10 的偶数:
even_nums = list(range(2,11,2))
print(even_nums)
#[2, 4, 6, 8, 10]
在这个示例中,函数 range()从 2 开始数,然后不断加 2,直到达到或超过终值(11),
使用函数 range()几乎能够创建任何需要的数集。例如,如何创建一个列表,其中包含前 10 个整数(1~10)的平方呢?在 Python 中,用两个星号(**)表示乘方运算。下面的代码演示了 如何将前 10 个整数的平方加入一个列表中:
squares = []
for num in range(1,11):
squares.append(num ** 2)
print(squares)
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2.3 对数字列表执行简单的统计计算
有几个专门用于处理数字列表的 Python 函数。例如,你可以轻松地找出数字列表的最大值
、 最小值
和总和
:
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(min(data1))
#1
print(max(data1))
#9
print(sum(data1))
#45
3 使用列表的一部分
以处理列表的部分元素,Python 称之为切片。
3.1 切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数 range()
一样, Python 在到达第二个索引之前的元素后停止。要输出列表中的前三个元素,需要指定索引 0 和 3, 这将返回索引为 0、1 和 2 的元素。
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data1[0:5])
#[1, 2, 3, 4, 5]
你可以生成列表的任意子集。例如,如果要提取列表的第二、第三和第四个元素,可将起始 索引指定为 1,并将终止索引指定为 4:
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data1[1:4])
#[2, 3, 4]
如果没有指定第一个索引,Python 将自动从列表开头开始:
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data1[:4])
#[1, 2, 3, 4]
要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素到列表末 尾的所有元素,可将起始索引指定为 2,并省略终止索引:
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data1[2:])
#[3, 4, 5, 6, 7, 8, 9]
若同时省略起始和结束索引,则创建一个和原始列表一样的切片。
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data1[:])
#[1, 2, 3, 4, 5, 6, 7, 8, 9]
可在表示切片的方括号内指定第三个值。这个值告诉 Python 在指定范围内每隔多少元素 提取一个。
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data1[0:7:3])
#[1, 4, 7]
3.2 遍历切片
如果要遍历列表的部分元素,可在 for 循环中使用切片。
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for da in data1[0:4]:
print(da)
#1
#2
#3
#4
3.3 复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。 这让 Python 创建一个始于第一个元素、终止于最后一个元素的切片,即整个列表的副本。
data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
data2 = data1[:]
print(data2)
#[1, 2, 3, 4, 5, 6, 7, 8, 9]
现在尝试修改两个列表的元素,发现互不影响,说明通过切片复制的列表和原列表是完全独立的。
data1.append(100)
data2.append(200)
print(data1,data2)
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 100] [1, 2, 3, 4, 5, 6, 7, 8, 9, 200]
4 元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网 站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素, 元组可以满足这种需求。Python 将不能修改的值称为不可变的,而不可变的列表被称为元组。
4.1 定义元组
元组
看起来很像列表
,但使用圆括号
而非中括号
来标识。定义元组后,就可使用索引来访问 其元素,就像访问列表元素一样。
例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它 们是不能修改的:
dimensions = (200, 50)
print(dimensions[0])
#200
print(dimensions[1])
#500
严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要 定义只包含一个元素的元组,必须在这个元素后面加上逗号:
my_t = (3,)
4.2 遍历元组中的所有值
像列表一样,也可以使用 for 循环来遍历元组中的所有值:
dimensions = (200, 50)
for dim in dimensions:
print(dim)
#200
#50
5.3 修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)
#200
#50
dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)
#400
#100
本文来自博客园,作者:雨-铃,原文链接:https://www.cnblogs.com/yuling25/p/15098918.html