Python数据类型之列表(二)操作列表

目录

         4.1遍历整个列表

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)

4.2避免缩进错误

忘记缩进  忘记缩进额外的代码行  不必要的缩进  循环后不必要的缩进  遗漏了冒号

4.3 创建数值列表

需要存储一组数字的原因有很多, 例如, 在游戏中, 需要跟踪每个角色的位置, 还可能需要跟踪玩家的几个最高得分。 在数据可视化中, 处理的几乎都是由数字(如温度、 距离、 人口数量、 经度和纬度等) 组成的集合。

#不包含右侧数字
for i in range(1,100):
    print(i,end=",")

创建数字列表:

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

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

for i in range(2,10,2):
    print(i)

使用函数range() 几乎能够创建任何需要的数字集, 例如, 如何创建一个列表, 其中包含前10个整数(即1~10) 的平方呢? 在Python中, 两个星号(** ) 表示乘方运算。 下面的代码演示了如何将前10个整数的平方加入到一个列表中:

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

列表解析
前面介绍的生成列表squares 的方式包含三四行代码, 而列表解析让你只需编写一行代码就能生成这样的列表。 列表解析 将for 循环和创建新元素的代码合并成一行, 并自动附加新元素。 面向初学者的书籍并非都会介绍列表解析, 这里之所以介绍列表解析, 是因为等你开始阅读他人编写的代码时, 很可能会遇到它们

square=[i**2 for i in range(1,10)]
print(square)

4.4 使用列表的一部分

切片
要创建切片, 可指定要使用的第一个元素和最后一个元素的索引。 与函数range() 一样, Python在到达你指定的第二个索引前面的元素后停止。 要输出列表中的前三个元素, 需要指定索引0~3, 这将输出分别为0 、 1 和2 的元素。

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])

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

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])

要让切片终止于列表末尾, 也可使用类似的语法。


players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])

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

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])

遍历切片
如果要遍历列表的部分元素, 可在for 循环中使用切片。 在下面的示例中, 我们遍历前三名队员, 并打印他们的名字:

players = ['charles', 'martina', 'michael', 'florence', 'eli']
for player in players[2:]:
    print(player)


在很多情况下, 切片都很有用。 例如, 编写游戏时, 你可以在玩家退出游戏时将其最终得分加入到一个列表中。 然后, 为获取该玩家的三个最高得分, 你可以将该列表按降序排列, 再创建一个只包含前三个得分的切片。 处理数据时, 可使用切片来进行批量处理; 编写Web应用程序时, 可使用切片来分页显示信息, 并在每页显示数量合适的信息。


复制列表 【具体的深浅拷贝问题将在下篇博客中分析

【1】要复制列表, 可创建一个包含整个列表的切片, 方法是同时省略起始索引和终止索引([:] ) 。 这让Python创建一个始于第一个元素, 终止于最后一个元素的切片, 即复制整个列表。
例如, 假设有一个列表, 其中包含你最喜欢的四种食品, 而你还想创建另一个列表, 在其中包含一位朋友喜欢的所有食品。 不过, 你喜欢的食品, 这位朋友都喜欢, 因此你可以通过复制来创建这个列表:

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)

为核实我们确实有两个列表, 下面在每个列表中都添加一种食品, 并核实每个列表都记录了相应人员喜欢的食品:

# 添加新元素
my_foods.append("apple")
print(my_foods)
friend_foods.append("banana")
print(friend_foods)

运行结果:

确实这两种食品包含在正确的列表中。即为两个列表

【2】不采用切片的情况,而是直接赋值

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(str(friend_foods)+"\n")
# 添加新元素
my_foods.append("apple")
print(my_foods)
friend_foods.append("banana")
print(friend_foods)

运行结果:

这里将my_foods 赋给friend_foods , 而不是将my_foods 的副本存储到friend_foods  。 这种语法实际上是让Python将新变量friend_foods 关联到包含在my_foods 中的列表, 因此这两个变量都指向同一个列表。 鉴于此, 当我们将'apple' 添加到my_foods 中时, 它也将出现在friend_foods 中; 同样, 虽然'banana' 好像只被加入到了friend_foods 中, 但它也将出现在这两个列表中。

4.5 小试牛刀  做点联系检验一下自己吧

4-1 比萨 : 想出至少三种你喜欢的比萨, 将其名称存储在一个列表中, 再使用for 循环将每种比萨的名称都打印出来。
修改这个for 循环, 使其打印包含比萨名称的句子, 而不仅仅是比萨的名称。 对于每种比萨, 都显示一行输出, 如“I like pepperoni pizza”。
在程序末尾添加一行代码, 它不在for 循环中, 指出你有多喜欢比萨。 输出应包含针对每种比萨的消息, 还有一个总结性句子, 如“I really love pizza!”。
4-2 动物 : 想出至少三种有共同特征的动物, 将这些动物的名称存储在一个列表中, 再使用for 循环将每种动物的名称都打印出来。
修改这个程序, 使其针对每种动物都打印一个句子, 如“A dog would make a great pet”。
在程序末尾添加一行代码, 指出这些动物的共同之处, 如打印诸如“Any of these animals would make a great pet!”这样的句子。
4-3 数到20 : 使用一个for 循环打印数字1~20(含) 。
4-4 一百万 : 创建一个列表, 其中包含数字1~1 000 000, 再使用一个for 循环将这些数字打印出来(如果输出的时间太长, 按Ctrl + C停止输出, 或关闭输出窗口) 。
4-5 计算1~1 000 000的总和 : 创建一个列表, 其中包含数字1~1 000 000, 再使用min() 和max() 核实该列表确实是从1开始, 到1 000 000结束的。 另外, 对这个列表
调用函数sum() , 看看Python将一百万个数字相加需要多长时间。
4-6 奇数 : 通过给函数range() 指定第三个参数来创建一个列表, 其中包含1~20的奇数; 再使用一个for 循环将这些数字都打印出来。
4-7 3的倍数 : 创建一个列表, 其中包含3~30内能被3整除的数字; 再使用一个for 循环将这个列表中的数字都打印出来。
4-8 立方 : 将同一个数字乘三次称为立方。 例如, 在Python中, 2的立方用2**3 表示。 请创建一个列表, 其中包含前10个整数(即1~10) 的立方, 再使用一个for 循环将这些立方数都打印出来。
4-9 立方解析 : 使用列表解析生成一个列表, 其中包含前10个整数的立方。
4-10 切片 : 选择你在本章编写的一个程序, 在末尾添加几行代码, 以完成如下任务。
打印消息“The first three items in the list are:”, 再使用切片来打印列表的前三个元素。
打印消息“Three items fromthe middle of the list are:”, 再使用切片来打印列表中间的三个元素。
打印消息“The last three items in the list are:”, 再使用切片来打印列表末尾的三个元素。
4-11 你的比萨和我的比萨 : 在你为完成练习4-1而编写的程序中, 创建比萨列表的副本, 并将其存储到变量friend_pizzas 中, 再完成如下任务。
在原来的比萨列表中添加一种比萨。
在列表friend_pizzas 中添加另一种比萨。
核实你有两个不同的列表。 为此, 打印消息“My favorite pizzas are:”, 再使用一个for 循环来打印第一个列表; 打印消息“My friend's favorite pizzas are:”, 再使用一个for 循环来打印第二个列表。 核实新增的比萨被添加到了正确的列表中。
4-12 使用多个循环 : 在本节中, 为节省篇幅, 程序foods.py的每个版本都没有使用for 循环来打印列表。 请选择一个版本的foods.py, 在其中编写两个for 循环, 将各个食品列表都打印出来
 



 

猜你喜欢

转载自blog.csdn.net/album_gyd/article/details/81182417