Python_操作列表

遍历列表

  你经常遍历列表的所有元素,对每个元素执行相同的操作。例如,在游戏中,可能需要将每个界面元素平移相同的距离;对于包含数字列表,可能需要对每个元素执行相同的统计运算;在网站中,可能需要显示文章列表中的每个标题。需要对列表中的每个元素都执行相同的操作时可以用Python中的for循环。

magician.py

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

alice
david
carolina

首先定义了一个列表,接下来定义了一个for循环,让Python从列表magicians取出一个名字,并将其存储在变量magician中,最后让Python打印存储在变量中的名字。

避免缩进错误

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

>>>magicians=['alice','david','carolina']
>>>for magician in magicians:
       print(magician.title()+",that was a great trick!")
   print("Thank you everyone, that was a great magic show!")

Alice,that was a great trick!
David,that was a great trick!
Carolina,that was a great trick!
Thank you everyone, that was a great magic show!

  第一条print语句针对列表中的每位魔术师重复执行。然而由于第二条print语句没有缩进,因此只执行了一次。

创建数值列表

  在游戏中,需要跟踪每个角色的位置,还可能需要跟踪玩家的几个最高得分。在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和维度等)组成的集合。
  列表非常适合于存储数字,而Python提供了很多工具,可帮助你高效地处理数字列表。

使用函数range()

  Python函数range()让你能够轻松地生成一系列数字。

number.py

>>> for value in range(1,5):
    print(value)
1
2
3
4

  函数range()让python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。
  使用range时,如果输出的值不符合预期,尝试将指定的值加1或减1。

使用range()创建数字列表

  要创建数字列表,可使用函数list()将range的结果转换为列表。将range作为list的参数,输出将为一个数字列表。

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

  使用函数range()时,还可以指定步长。例如,打印1~10内的偶数:
even_numbers.py

>>> even_numbers=list(range(2,11,2))
>>> print(even_numbers)
[2, 4, 6, 8, 10]

  使用range()几乎能创建任何需要的数字集,例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?
在Python中,两个星号(**)表示乘方运算。

squares.py

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

  首先我们创建了一个空列表;接下来,使用函数range()让Python遍历1~10的值。在循环中,计算当前的平方,并将结果存储到变量square中。然后将新计算得到的平方值附加到列表squares末尾。最后print未用缩进,单独起行打印结果。

对数字列表进行简单的统计计算
>>> digitals=[2,5,6,4,8,10,13,1,7]
>>> min(digitals)
1
>>> max(digitals)
13
>>> sum(digitals)
56

  这里用min( ),max( ),sum( )分别统计了列表digitals里的最小值,最大值和总和。

列表解析

  前面介绍的生成列表squares的方式包含三四行代码,而列表解析让你只需要一行代码就能生成这样的列表。
  下面使用列表解析创建你在前面看到的平方数列表:

squares.py

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

  这种语法,首先指定一个描述性的列表名,如squares。然后,指定一个左方括号,并定义一个表达式,用于生成ni要存储到列表的值。在这个示例中,表达式为value**2,它计算平方值。接下来,编写一个for循环给表达式供值,再加上右方括号。这里的for语句末尾没有冒号。

使用列表的一部分

  前面,我们学习了如何访问单个列表元素。本章中,我们一直在学习如何处理列表中的所有元素。我们还可以学习如何处理列表的部分元素——Python称之为切片。
  要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range( )一样,Python在到达你指定的第二个索引前面的元素后停止。

Players.py
  打印前三名在列表players里的队员:

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

  如果你要提取列表第2~4个元素,可将起始索引指定为1,终止索引指定为4:

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

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

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

  如果你没有指定第二个索引,Python将从第一个索引开始直到列表的末尾结束:

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

遍历切片

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

players=['charles','martina','michael','florence','eli']
print("Here is the first three members on my team:")
for player in players[:3]:
    print(player.title())

Here is the first three members on my team:
Charles
Martina
Michael

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

复制列表

  我们经常需要根据既有的列表创建全兴的列表。要复制列表,可创建一个包含整个列表的切片,方法是同事省略起始和终止索引([ : ])。

foods.py

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 favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']

  我们创建了一个名为my_foods的食品列表,然后创建了一个名为friend_foods的新列表。我们在不指定任何索引的情况下从列表my_foods中提取了一个切片,从而创建了这个列表的副本,再将该副本存储到变量friend_foods中,打印每个列表,我们发现它们包含的食品相同。

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

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

my_foods.append('cannoli')
friend_foods.append('ice cream')

print("my favorite foods are:")
print(my_foods)

print("\nMy friend's favorite foods are:")
print(friend_foods)

my favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'ice cream']

元组

  列表非常适合于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏的角色列表至关重要。然后,有时候你需要创建一系列不可修改的元组,元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。

定义元组

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

dimension.py

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

200
50

  如果修改dimensions元组中的元素,Python会报错,在Python内运行下面代码,看看结果如何。

dimensions=(200,50)
dimensions[0]=100
遍历元组中所有值

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

dimensions=(200,50)
for dimension in dimensions:
    print(dimension)
200
50
修改元组的变量

  虽然不能修改元组的元素,但是可以通过给存储元组的变量赋值。

dimensions=(200,50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions=(400,100)
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)

Original dimensions:
200
50

Modified dimensions:
400
100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值