第四章 操作列表

4.1 遍历整个列表

如果需要对列表中的每个元素都执行相同的操作,可以使用python中的for循环。

比如说,有一个名单,把名单中所有字母进行打印出来的操作。可以使用for循环去遍历整个名单列表,而不用一个一个的去获取名单中的信息。如果名单中有大量重复名字或者名单中数量有改变(长度改变)都会很麻烦的修改代码。使用循环就可以避免。

letters = ['a','c','g','f','d','t','h']
#创建一个letters字母列表 
#for循环 遍历letters列表中的每一个letter  
#for循环 直接定义letters列表中每一个元素变量名都为letter 
for letter in letters:   
    print(letter)    #输出每一个变量

4.1.1 深入研究循环

for 循环思路:

首先for循环第一行是类似定义的语句,冒号下是循环体,写的主要是如何处理这个for循环的内容。循环体一般都有缩进,可以看到for循环语句定格写的,print语句是自动缩进的。

大致如下过程:

  • 从letters列表中获取第一个值 a ,并与变量letter关联,然后运行for循环冒号下的一行代码print,将a打印出来。
  • 打印结束,for循环继续遍历letters列表,并从中获取第二个值c,将其与变量letter关联,然后运行for循环冒号下的打印操作。
  • 打印结束,for循环继续遍历。。。。
  • 打印结束,for循环继续遍历,发现没有能获取的内容,for循环遍历结束,跳出整个循环,不进行循环冒号下的代码。

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

在for循环冒号下,可以根据需要写很多行代码,也可以打印不同的信息。

names = ['alice','david','jessica']
for name in names:
    print(f"Hello {name.title()},nice to meet u!")

for循环里可以写多行代码,整个循环体中的多行代码全部执行之后,在循环遍历下一个变量值。

  • 只要是冒号下缩进的都是在这个for循环体中的语句。
  • 该循环体中有两行print语句要执行,冒号下的两行语句都执行之后,再去遍历下一个变量。 

4.1.3 在for循环结束后执行一些操作

想结束for循环的话,需要删除缩进,这时候输入的代码就是定格写的了,没有缩进的代码意味着就是正常的只执行一次的代码,不是循环的代码。

names = ['alice','david','jessica']
for name in names:
    print(f"Hello {name.title()}")
    print("Nice to meet you !\n")  #\n 插入空行

print("See you next time.")

4.2 避免错误

注意: 是否缩进,是否遗忘冒号。

4.3 创建数值列表

4.3.1 使用range()函数

创建数值列表可以使用range()函数。

range()函数规则,以range(1,5)为例子:

  • 括号中写(开始值,结束值)
  • (1,5)代表从1开始,一直到5结束,且不包括5
for value in range(1,5):
    print(value)

调用range()函数,也可以只指定一个函数比如range(5),代表从0开始到5结束,输出的是0,1,2,3,4。

4.3.2 使用range()和list()函数 创建数值列表

可以使用list()函数将range()函数的结果转换为列表 。

numbers1 = ['1','2','3','4']
print(numbers1)
print(numbers1[0],numbers1[1],numbers1[2],numbers1[3])
print("\n") #插入空行

numbers2 = list(range(1,5))
print(numbers2)
print(numbers2[0],numbers2[1],numbers2[2],numbers2[3])

使用range函数还可以设置步长,就是间隔几。

even_number = list(range(0,11,2))
print(even_number)

数值可以进行变换,比如说平方。

  1. 首先,创建一个名为squares的空列表。
  2. for循环range()函数生成连续的一系列数值。
  3. for循环体中 ,计算每一个遍历数值的平方,并将结果赋值给sq。
  4. for循环体中, 将每一个sq值使用append方法添加到squares列表中。
  5. 循环彻底结束后,执行循环体外的语句,输出squares列表。

若为了简洁,可以将3.4.换成一个语句,直接使用append方法,将每一个数值的平方添加到squares列表中。


squares = []
for value in range(1,11):
    sq= value**2 #乘方运算
    squares.append(sq)  #append方法在第三章3.2.2展示,将元素添加到列表末尾。

print(squares)

#可以将代码简洁表达
print('\n')

squares1 = []
for value in range(1,11):
    squares1.append(value**2)

print(squares1)

4.3.3 对数值列表执行简单的统计计算

统计计算比如说,取最大值,最小值,数值的总和。

4.3.4 列表推导式

列表推导式可以将for循环和创建新元素的代码合并成一行,并自动追加新元素。这样的代码会更简洁。

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

动手试一试

4.3

numbers = list(range(1, 21))

for number in numbers:
    print(number)

4.4&4.5

numbers = list(range(1, 1_000_001))

print(min(numbers))
print(max(numbers))
print(sum(numbers))

 4.6

odd_numbers = list(range(1, 20, 2))

for number in odd_numbers:
    print(number)

4.7

threes = list(range(3, 31, 3))

for number in threes:
    print(number)

4.8

下面这个出错了。列表不能进行幂运算

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

print(num)

正确如下

4.8&4.9


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

cubes = [number**3 for number in range(1,11)]

for cube in cubes:
    print(cube)

4.4 使用列表的一部分。

4.4.1 切片

处理列表的部分元素,在python中称为切片。

  • 与range函数一样,有开始索引和终止索引,不包括终止索引的值。
  • 索引是从0开始。 
  • 索引可以忽略
players = ["lee","zhang","wang","liu"]
print(players[0:3])
#输出0 1 2 索引的值
print(players[1:4])
#输出1 2 3 索引的值
print(players[2:])
#输出 从2之后 索引的值
print(players[:2])
#输出 0 1 索引的值
print(players[-3:])
#输出 最后3个 索引的值 (从倒数第三个元素到列表的末尾)(倒数从1 开始数不是从 0)
print(players[:-3])
#输出 从开头到倒数第三个元素之前所有的元素
print(players[:-2])
#输出 从开头到倒数第二个元素之前所有的元素

 

4.4.2 遍历切片

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

players = ["lee","zhang","wang","liu","quan"]
print("Here are my friend:")
for fri in players[:3]:  #遍历 0 1 2 
    print(fri.title())

4.4.3 复制列表

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

players = ["lee","zhang","wang","liu","quan"]
my_players = players[:]
print(players)
print(my_players)

 

如果直接写my_players = players 会出错,相当于指向同一列表,不管对哪个进行修改,都同时改变。

players = ["lee","zhang","wang","liu","quan"]
my_players = players
players.append("hong")
my_players.append("cui")
print(players)
print(my_players)

 带上索引才是我们想要的效果

4.5元组

列表可以修改,不可以修改的列表称为元组。

4.5.1 定义元组

  • 元组使用的是() 不是【】
  • 元组也可以根据索引来访问其中的元素

4.5.2 遍历值&修改元组变量

  • 遍历元组和遍历列表一样,for循环。
  • 不能直接修改元组中的元素,但是可以给表示元组的变量赋值,就是重新定义元组

 

dimensions = (200,50)
# print(dimensions[:])
# dimensions[0] =66666  #修改元组会出错
# print(dimensions[0])
for i in dimensions:
    print(i)

dimensions =(111111,222222222)
for i in dimensions:
    print(i)

动手试一试

menu_items = (
    'rockfish sandwich', 'halibut nuggets', 'smoked salmon chowder',
    'salmon burger', 'crab cakes',
    )

print("You can choose from the following menu items:")
for item in menu_items:
    print(f"- {item}")

menu_items = (
    'rockfish sandwich', 'halibut nuggets', 'smoked salmon chowder',
    'black cod tips', 'king crab legs',
    )

print("\nOur menu has been updated.")
print("You can now choose from the following items:")
for item in menu_items:
    print(f"- {item}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值