【Python学习】三、操作列表

3.1 遍历整个列表

magicians = ['alice', 'bob', 'carol']
for magician in magicians:
    print(magician)

3.1.1 深入研究循环

 首先,Python读取其中的第一行代码:

for magician in magicians:

这行代码让Python获取列表magicians 中的第一个值('alice' ),并 将其存储到变量magician 中。接下来,Python读取下一行代码:

        print(magician)

它让Python打印magician 的值——依然是'alice' 。鉴于该列表还包 含其他值,Python返回到循环的第一行:

 for magician in magicians:

Python获取列表中的下一个名字——'bob' ,并将其存储到变量 magician 中,再执行下面这行代码: 

        print(magician)

接下来,Python再次执行整个循环,对列表中的最后一个值——'carol' 进 行处理。至此,列表中没有其他的值了,因此Python接着执行程序的下一行代码。在这个示例中,for 循环后面没有其他的代码,因此程序就此结束。 

编写for 循环时,对于用于存储列表中每个值的临时变量,可指定任何名称。然而,选择描述单个列表元素的有意义的名称大有帮助。 例如,对于小猫列表、小狗列表和一般性列表,像下面这样编写for 循 环的第一行代码是不错的选择:

for cat in cats:
for dog in dogs:
for item in list_of_items:

使用单数和复数式名称,可帮助你判断代码段处理的是单个列表元素还是整个列表。

3.1.2 对for循环执行更多操作

在for 循环中,想包含多少行代码都可以。

magicians = ['alice', 'bob', 'carol']
for magician in magicians:
    print(magician + ", you are great!\n")
    print(magician + ", see you again!\n")

3.1.3 在for循环结束后执行操作

magicians = ['alice', 'bob', 'carol']
for magician in magicians:
    print(magician + ", you are great!\n")
    print(magician + ", see you again!\n")
print("Thank u everone!")

3.2 避免缩进错误

Python根据缩进来判断代码行与前一个代码行的关系。

在前面的示例中,向各位魔术师显示消息的代码行是for 循环的一部分,因为它们缩进了。

Python通过使用缩进让代码更易读;简单地说,它要求你使用缩进让代码整洁而结构清晰。

注意,千万不要遗忘冒号!

for 语句末尾的冒号告诉Python,下一行是循环的第一行。

如果不小心遗漏了冒号,将导致语法错误,因为Python不知道意欲何为。

这种错误虽然易于消除,但并不那么容易发现。

3.3 创建数值列表

3.3.1 函数range()

函数range() 让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止(左闭右开)。

for value in range(1,5):
    print(value)

若要打印数字1-5,则需使用range(1,6)

使用range() 时,如果输出不符合预期,请尝试将指定的值加1或减1。

3.3.2 使用range() 创建数字列表

要创建数字列表,可使用函数list() 将range() 的结果直接转换为列表。

如果将range() 作为list() 的参数,输出将为一个数字列表。 

numbers = list(range(1,6))
print(numbers)

 使用函数range() 时,还可指定步长。例如,下面的代码打印1~10内的偶数:

even_numbers = list(range(2, 11, 2))
print(even_numbers)

如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?

提示:在Python中,两个星号(** )表示乘方运算。

squares = []
for square in range(1,11):
    squares.append(square**2)
print(squares)

3.3.3 对数字列表执行简单的统计计算

min(列表) # 求列表元素的最小值
max(列表) # 求列表元素的最大值
sum(列表) # 求列表元素的和

3.3.4 列表解析

列表解析将for 循环和创建新元素的代码合并成一行,并自动附加新元素。

squares = [value ** 2 for value in range(1, 11)]
print(squares)

要使用这种语法,首先指定一个描述性的列表名,如squares ;

然后, 指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。

在这个示例中,表达式为value**2 ,它计算平方值。

接下来,编写一个for 循环,用于给表达式提供值,再加上右方括号。

在这里,for 循环为for value in range(1,11) ,它将值1~10提供给表 达式value**2 。

请注意,这里的for 语句末尾没有冒号。

3.4 使用列表的一部分

3.4.1 切片

创建切片,可指定要使用的第一个元素和最后一个元素的索引。

与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。

要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0 、1 和2 的元素。

# 遍历前三个元素
names = ['alice', 'bob', 'carol', 'dave', 'eve']
for name in names[0:3]:
    print(name)

# 遍历1-3
names = ['alice', 'bob', 'carol', 'dave', 'eve']
for name in names[1:4]:
    print(name)

 如果没有指定第一个索引,Python将自动从列表开头开始:

names = ['alice', 'bob', 'carol', 'dave', 'eve']
for name in names[:4]:
    print(name)

 如果要提取从第3个元素到列表末尾的所有元素,可将起始索引指定为2 ,并省略终止索引:

names = ['alice', 'bob', 'carol', 'dave', 'eve']
for name in names[2:]:
    print(name)

负数索引返回离列表末尾相应距离的元素,因此 你可以输出列表末尾的任何切片。例如,如果你要输出名单上的最后三人,可使用切片names[-3:] : 

names = ['alice', 'bob', 'carol', 'dave', 'eve']
for name in names[-3:]:
    print(name)

 3.4.2 遍历切片

如果要遍历列表的部分元素,可在for 循环中使用切片。

names = ['alice', 'bob', 'carol', 'dave', 'eve']
print("There are my first three friends:")
for name in names[:3]:
    print(name)

 3.4.3 复制列表

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] )

names = ['alice', 'bob', 'carol', 'dave', 'eve']
names2 = names[:]
print(names)
print(names2)

为了核实我们确实有两个列表,在每个列表中都添加不同的名字。

names = ['alice', 'bob', 'carol', 'dave', 'eve']
names2 = names[:]

names.append('frank')
names2.append('grace')

print(names)
print(names2)

 这表明我们确实得到了两个列表。

如果直接令names2=names,则不会获得两个列表。这种语法实际上是让Python将新变量 names2关联到包含在names中的列表,因此这两个变量都 指向同一个列表。

names = ['alice', 'bob', 'carol', 'dave', 'eve']
names2 = names

names.append('frank')
names2.append('grace')

print(names)
print(names2)

3.5 元组

列表是可以修改的。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组 。

3.5.1 定义元组

元组是使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

yuanzu1 = (200, 50)
print(yuanzu1[0])
print(yuanzu1[1])

 当你尝试修改元组的值:

yuanzu1 = (200, 50)
yuanzu1[0] = 1

 Python报告错误,这很好,因为这正是我们希望的。

3.5.2 遍历元组的值

像列表一样,也可以使用for 循环来遍历元组中的所有值:

yuanzu1s = (200, 50, 60, 'bob')
for yuanzu1 in yuanzu1s:
    print(yuanzu1)

3.5.3 修改元组变量

虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:

yuanzu1s = (200, 50, 60, 'alice')
print("Original dimensions:")
for yuanzu1 in yuanzu1s:
    print(yuanzu1)
print("\n")
yuanzu1s = (200, 50, )
print("Modified dimensions:")
for yuanzu1 in yuanzu1s:
    print(yuanzu1)

 3.6 练习

4-1 比萨 :想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for循环将每种比萨的名称都打印出来。

修改这个for 循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如“I like pepperoni pizza”。

在程序末尾添加一行代码,它不在for循环中,指出你有多喜欢比萨。输出应包含针对每种比萨的消息,还有一个总结性句子,如“I really love pizza!”。

# 4-1
pizzas = ['apple', 'banana', 'orange']
for pizza in pizzas:
    print("I like " + pizza + " pizza!\n")
print("I really love pizza!")

 

 4-3 数到20 :使用一个for 循环打印数字1~20(含)。

for value in range(1, 21):
    print(value)

 4-4 一百万 :创建一个列表,其中包含数字1~1 000 000,再使用一 个for 循环将这些数字打印出来(如果输出的时间太长,按Ctrl + C 停止输出,或关闭输出窗口)。

numbers = list(range(1, 1000001))
for number in numbers:
    print(number)

 4-5 计算1~1 000 000的总和 :创建一个列表,其中包含数字1~1 000 000,再使用min() 和max() 核实该列表确实是从1开始,到1 000 000结束的。另外,对这个列表调用函数sum() ,看看Python将一百万个数字相加需要多长时间。

# 4-5
numbers = list(range(1, 1000001))
print(min(numbers))
print(max(numbers))
print(sum(numbers))

 ​​​​

 4-6 奇数 :通过给函数range() 指定第三个参数来创建一个列表, 其中包含1~20的奇数;再使用一个for 循环将这些数字都打印出 来。

# 4-6
odd_numbers = list(range(1, 20, 2))
print(odd_numbers)

 4-8 立方 :将同一个数字乘三次称为立方。例如,在Python中,2 的立方用2**3 表示。请创建一个列表,其中包含前10个整数(即 1~10)的立方,再使用一个for 循环将这些立方数都打印出来。

# 4-8
numbers = []
for value in range(1, 11):
    numbers.append(value**3)

for number in numbers:
    print(number)

 

4-9 立方解析 :使用列表解析生成一个列表,其中包含前10个整数的立方。 

# 4-9
numbers = [value ** 3 for value in range(1, 11)]
print(numbers)

 4-10 切片 :选择你在本章编写的一个程序,在末尾添加几行代码,以完成如下任务。

打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个元素。

打印消息“Three items from the middle of the list are:”,再使用切片来打印列表中间的三个元素。

打印消息“The last three items in the list are:”,再使用切片来打印列表末尾的三个元素。

# 4-10
numbers = [value ** 3 for value in range(1, 11)]
print("The first three items in the list are:")
for number in numbers[0:3]:
    print(number)

print("Three items from the middle of the list are:")
for number in numbers[3:6]:
    print(number)
print("The last three items in the list are:")
for number in numbers[-3:]:
    print(number)

4-11 你的比萨和我的比萨 :在你为完成练习4-1而编写的程序中, 创建比萨列表的副本,并将其存储到变量friend_pizzas 中,再完成如下任务。

在原来的比萨列表中添加一种比萨。

在列表friend_pizzas 中添加另一种比萨。

核实你有两个不同的列表。为此,打印消息“My favorite pizzas are:”,再使用一个for 循环来打印第一个列表;打印消息“My friend's favorite pizzas are:”,再使用一个for 循环来打印第二个 列表。核实新增的比萨被添加到了正确的列表中。 

# 4-11
pizzas = ['apple', 'banana', 'orange']
friend_pizzas = pizzas[:]
pizzas.append('strawberry')
friend_pizzas.append('peach')
print("My favourite pizzas are:")
for pizza in pizzas:
    print(pizza)

print("My friend's favourite pizzas are:")
for f_pizza in friend_pizzas:
    print(f_pizza)

 

4-13 自助餐 :有一家自助式餐馆,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元组中。

使用一个for 循环将该餐馆提供的五种食品都打印出来。

尝试修改其中的一个元素,核实Python确实会拒绝你这样做。

餐馆调整了菜单,替换了它提供的其中两种食品。请编写一个这样的代码块:给元组变量赋值,并使用一个for 循环将新元组的每个元素都打印出来。 

# 4-13
foods = ("fish", "chicken", "bread", "noodles", "meat")
for food in foods:
    print(food)

print("\n")
foods = ("fish", "banana", "apple", "noodles", "meat")
for food in foods:
    print(food)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值