Python--操作列表

Python--操作列表

遍历整个列表

对于每个元素的执行操作,使用单数和复数的名称,可用帮助判断代码片段处理的是单个列表元素还是整个列表.

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

在for循环中可以执行更多的操作

magicians = ['alice', 'bob', 'charlie']
for magician in magicians:
    print(magician.title() + ",that was great trick!")
    print("非常漂亮的表演" + magician.title() + '\n')
# Alice,that was great trick!
# 非常漂亮的表演Alice
# 
# Bob,that was great trick!
# 非常漂亮的表演Bob
# 
# Charlie,that was great trick!
# 非常漂亮的表演Charlie
#

缩进

Python中是用缩进来控制每个控制域的,而不是使用花括号来控制.所以有时候忘记缩进会让代码出现错误.

magicians = ['alice', 'bob', 'charlie']
for magician in magicians:
print(magician.title() + ",that was great trick!")

如果忘记缩进以外的代码行

magicians = ['alice', 'bob', 'charlie']
for magician in magicians:
    print(magician.title() + ",that was great trick!")
print("非常漂亮的表演" + magician.title() + '\n')
如果上面的代码忘记缩进那么只会打印最后一个charlie的名字,因为当循环最后一次结束的时候,magician里面存储的就是charlie.
# Alice,that was great trick!
# Bob,that was great trick!
# Charlie,that was great trick!
# 非常漂亮的表演Charlie

要避免没有必要的缩进,同时避免循环后没有必要的缩进.例如下面的情况

magicians = ['alice', 'bob', 'charlie']
for magician in magicians:
    print(magician.title() + ",that was great trick!")
    print('魔术表演结束,谢谢.')
# Alice,that was great trick!
# 魔术表演结束,谢谢.
# Bob,that was great trick!
# 魔术表演结束,谢谢.
# Charlie,that was great trick!
# 魔术表演结束,谢谢.



同时使用for循环的时候不要忘记里面的冒号

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

pizzas=['肯德基','麦当劳','德克士']
for pizza in pizzas:
    print(pizza)
# 肯德基
# 麦当劳
# 德克士

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

pizzas=['肯德基','麦当劳','德克士']
for pizza in pizzas:
    print('我喜欢'+pizza+'披萨')
# 我喜欢肯德基披萨
# 我喜欢麦当劳披萨
# 我喜欢德克士披萨

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

pizzas=['肯德基','麦当劳','德克士']
for pizza in pizzas:
    print('我喜欢'+pizza+'披萨')
print('我真的很喜欢披萨')
# 我喜欢肯德基披萨
# 我喜欢麦当劳披萨
# 我喜欢德克士披萨
# 我真的很喜欢披萨

4-2 动物:想出至少三种有共同特征的动物,将这些动物的名称存储在一个列表中,再使用 for 循环将每种动物的名称都打印出来。

pets=['狗','猫','兔子']
for pet in pets:
    print(pet)
# 狗
# 猫
# 兔子

修改这个程序,使其针对每种动物都打印一个句子,如“A dog would make a great
pet”。

pets=['狗','猫','兔子']
for pet in pets:
    print('我非常喜欢'+pet)
# 我非常喜欢狗
# 我非常喜欢猫
# 我非常喜欢兔子

在程序末尾添加一行代码,指出这些动物的共同之处,如打印诸如“Any of these
animals would make a great pet!”这样的句子。

pets=['狗','猫','兔子']
for pet in pets:
    print('我非常喜欢'+pet)
print('我非常喜欢养宠物')
# 我非常喜欢狗
# 我非常喜欢猫
# 我非常喜欢兔子
# 我非常喜欢养宠物

数值列表类似于C语言中的计数型循环.

使用range()函数来生成一系列的数字

range(1,10) # 代表数字从1到9
for i in range(1,6):
    print(i)
# 1
# 2
# 3
# 4
# 5

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

如果想要创建数字列表,那么使用函数list()将range()的结果直接转换为列表.

numbers=list(range(1,6))
print(numbers)
# [1, 2, 3, 4, 5]

range()函数还可以指定步长

numbers=list(range(2,11,2))
print(numbers)
# [2, 4, 6, 8, 10]

创建1-10的2次幂的列表

squares=[]
for i in range(1,11):
    square=i**2
    squares.append(square)
print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

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

digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(min(digits))
print(max(digits))
print(sum(digits))
# 1
# 10
# 55

列表解析

一种代码量很短的方式来创建列表

squares=[value**2 for value in range(1,11)]
print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

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

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

一百万:创建一个列表,其中包含数字 1~1 000 000,再使用一个 for 循环将这
些数字打印出来

for i in range(1,1000001):
    print(i)

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

list=[]
for i in range(1,1000001):
    list.append(i)
print(sum(list))

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

list = []
for i in range(1, 20, 2):
    list.append(i)
for j in list:
    print(j)

3 的倍数:创建一个列表,其中包含 3~30 内能被 3 整除的数字;再使用一个 for
循环将这个列表中的数字都打印出来。

list = []
for i in range(3, 31,3):
    list.append(i)
for j in list:
    print(j)

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

list = []
for i in range(1, 11):
    list.append(i ** 3)
for j in list:
    print(j)

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

list = [i**3 for i in range(1,11)]
print(list)

切片

切片可以提取列表的子集

pets=['狗','猫','兔子','仓鼠']
print(pets[0:3])
# 列表pets中0-3的切片
# ['狗', '猫', '兔子']
pets=['狗','猫','兔子','仓鼠']
print(pets[0:3])
# 列表pets中1-4的切片,也是左闭右开的方式
# ['狗', '猫', '兔子']

如果没有第一个切片的参数的话,默认从0索引开始切片.

pets = ['狗', '猫', '兔子', '仓鼠']
print(pets[:3])
# ['狗', '猫', '兔子']

如果最后一个切片的参数为空的话,默认截至到切片的结尾.

pets = ['狗', '猫', '兔子', '仓鼠']
print(pets[1:])
# ['猫', '兔子', '仓鼠']

遍历切片

可以在for循环中使用切片

pets = ['狗', '猫', '兔子', '仓鼠']
for pet in pets[1:]:
    print('%'+pet+'%')
# %猫%
# %兔子%
# %仓鼠%
pets = ['狗', '猫', '兔子', '仓鼠']
for pet in pets[1:3]:
    print('%'+pet+'%')
# %猫%
# %兔子%

复制列表

可以使用切片来复制列表,并且将整个列表赋值给一个新的列表变量.

my_foods=['pizza','falafel','carrot cake']
friend_foods=my_foods[:]
print(my_foods)
print(friend_foods)
friend_foods.append('ice cream')
my_foods.append('tank')
print(my_foods)
print(friend_foods)
# ['pizza', 'falafel', 'carrot cake']
# ['pizza', 'falafel', 'carrot cake']
# ['pizza', 'falafel', 'carrot cake', 'tank']
# ['pizza', 'falafel', 'carrot cake', 'ice cream']

同时新复制出来的列表和原本的列表是两个完全不同的列表.

注意

下面的两行代码的含义完全不同

第一个可以理解为将my_foods的地址赋值给了friend_foods,这两个本质上还是一个列表

但是第二个表示为将列表的切片存放到一个新的列表中,本质上是两个列表.

friend_foods=my_foods
friend_foods=my_foods[:]
my_foods=['pizza','falafel','carrot cake']

friend_foods=my_foods
my_foods.append('tank')
print(friend_foods)
print(my_foods)
['pizza', 'falafel', 'carrot cake', 'tank']
# ['pizza', 'falafel', 'carrot cake', 'tank']

切片:选择你在本章编写的一个程序,在末尾添加几行代码,以完成如下任务。
打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个
元素。

fruits=['苹果','香蕉','橙子','水蜜桃','火龙果']
print('下面将打印前三个元素')
print(fruits[:3])
# 下面将打印前三个元素
# ['苹果', '香蕉', '橙子']

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

fruits=['苹果','香蕉','橙子','水蜜桃','火龙果']
print('下面将打印前三个元素')
print(fruits[1:4])
# 下面将打印前三个元素
# ['香蕉', '橙子', '水蜜桃']

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

fruits=['苹果','香蕉','橙子','水蜜桃','火龙果']
print('下面将打印最后三个元素')
print(fruits[2:5])
# 下面将打印最后三个元素
# ['橙子', '水蜜桃', '火龙果']

创建比萨列表的副本,并将其存储到变量 friend_pizzas 中,再完成如下任务。
在原来的比萨列表中添加一种比萨。
在列表 friend_pizzas 中添加另一种比萨。
核实你有两个不同的列表。为此,打印消息“My favorite pizzas are:”,再使用一
个 for 循环来打印第一个列表;打印消息“My friend’s favorite pizzas are:”,再使
用一个 for 循环来打印第二个列表。核实新增的比萨被添加到了正确的列表中。

my_pizzas=['肯德基','必胜客','德克士']
friend_pizzas=my_pizzas[:]
my_pizzas.append('百特喜')
friend_pizzas.append('巴贝拉')
print('我最喜欢的披萨是')
for pizza in my_pizzas:
    print(pizza)
print('我的朋友最喜欢的披萨是')
for pizza in friend_pizzas:
    print(pizza)
# 我最喜欢的披萨是
# 肯德基
# 必胜客
# 德克士
# 百特喜
# 我的朋友最喜欢的披萨是
# 肯德基
# 必胜客
# 德克士
# 巴贝拉

在本节中,为节省篇幅,程序 foods.py 的每个版本都没有使用
for 循环来打印列表。请选择一个版本的 foods.py,在其中编写两个 for 循环,将各个
食品列表都打印出来。

fruits=['苹果','香蕉','橙子','水蜜桃','火龙果']
for fruit in fruits:
    print(fruit)
my_foods=['pizza','falafel','carrot cake']
for food in my_foods:
    print(food)
# 苹果
# 香蕉
# 橙子
# 水蜜桃
# 火龙果
# pizza
# falafel
# carrot cake

元组

如果我们需要创建不可变的列表,那么我们可以使用元组.

Python将不能修改的值称为不可变的,而不可变的列表被称为元组。

元组的定义不用方括号,而是使用圆括号.

dimension=(200,50)
print(dimension[0])
print(dimension[1])
# dimension[0]=1 错误,我们不能强行修改元组中的值否则Python会返回错误的类型信息

# TypeError: 'tuple' object does not support item assignment

遍历元组

元组也可以和列表一样使用for循环来遍历

dimension=(200,50)
for i in dimension:
    print(i)
# 200
# 50

修改元组

虽然不能修改元组中的变量,但是可以重新定义元组

给元组的重新定义和合法的.

dimension=(200,50)
print('原本的元组是')
print(dimension)
dimension=(100,200)
print('修改之后的元组是')
print(dimension)
# 原本的元组是
# (200, 50)
# 修改之后的元组是
# (100, 200)

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

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

foods=('火锅','烤肉','甜品','饮料')
for food in foods:
    print(food)
# 火锅
# 烤肉
# 甜品
# 饮料

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

image-20240215181920362

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

foods=('火锅','烤肉','甜品','饮料')
print(foods)
foods=('火锅','烤肉','啤酒','冰淇淋')
print(foods)
# ('火锅', '烤肉', '甜品', '饮料')
# ('火锅', '烤肉', '啤酒', '冰淇淋')

posted @ 2024-02-15 18:27  harper886  阅读(16)  评论(0编辑  收藏  举报