📜  有效地在Python中使用迭代

📅  最后修改于: 2020-01-17 14:18:04             🧑  作者: Mango

以下是使用迭代器的不同方法。
C样式方法:这种方法需要先验的迭代总数。

# C样式的迭代方法
cars = ["Aston", "Audi", "McLaren"]
i = 0
while (i < len(cars)):
    print cars[i]
    i += 1

输出:

Aston
Audi
McLaren

重要事项:

  • Python程序员很少使用这种循环样式。
  • 这种四步方法不会在单视图循环结构中造成任何好处,尤其在可读性上。
  • 这在大型程序或设计中也容易出错。
  • Python中没有C样式的for循环,例如for(int i = 0; i

for-in样式的使用:
此样式在Python中使用,它包含列表,字典,n维数组等迭代器。迭代器获取每个组件并在循环时打印数据。在此结构中,迭代器会自动递增/递减。

# 通过for-in进行迭代
cars = ["Aston", "Audi", "McLaren"]
for x in cars:
    print x

输出:

Aston
Audi
McLaren

使用range函数建立索引我们还可以在Python中使用range()建立索引。

# 使用range的例子
cars = ["Aston", "Audi", "McLaren"]
for i in range(len(cars)):
    print cars[i]

输出:

Aston
Audi
McLaren

枚举:
枚举是内置的Python函数,它将输入作为迭代器,列表等,并返回包含索引和迭代器序列中该索引处的数据的元组。例如,enumerate(cars),返回一个迭代器,该迭代器将返回(0,cars [0]),(1,cars [1]),(2,cars [2]),依此类推。

# 使用enumerate()例子
cars = ["Aston" , "Audi", "McLaren "]
for i, x in enumerate(cars):
    print (x)

输出:

(0, 'Aston')
(1, 'Audi')
(2, 'McLaren ')

下面的解决方案也可以:

 # 使用enumerate()的另一个例子
cars = ["Aston" , "Audi", "McLaren "]
for x in enumerate(cars):
    print (x[0], x[1])

输出:

(0,'Aston')
(1,'Audi')
(2,'McLaren')

我们还可以直接打印enumerate()的返回值以查看其返回值。

# 打印enumerate()返回值
cars = ["Aston" , "Audi", "McLaren "]
print enumerate(cars)

输出:

[(0,'Aston'),(1,'Audi'),(2,'McLaren')]

枚举采用参数start,默认情况下设置为零。我们可以将此参数更改为我们喜欢的任何值。在下面的代码中,我们将start用作1。

# 展示start参数如何在enumerate中设定
cars = ["Aston" , "Audi", "McLaren "]
for x in enumerate(cars, start=1):
    print (x[0], x[1])

输出:

(1,'Aston')
(2,'Audi')
(3,'McLaren')

enumerate()帮助嵌入用于访问迭代器中的每个数据项并获取每个数据项的索引的解决方案。
 
循环扩展:
i)单个循环结构的两个迭代器:在这种情况下,将使用枚举函数在单个循环块中的每次迭代中使用列表和字典。让我们来看个例子。

# 两个lists
cars = ["Aston", "Audi", "McLaren"]
accessories = ["GPS kit", "Car repair-tool kit"]
# 创建字典.
prices = {1:"570000$", 2:"68000$", 3:"450000$",
          4:"8900$", 5:"4500$"}
# 打印
for index, c in enumerate(cars, start=1):
    print "车: %s 价格: %s"%(c, prices[index])
# 打印
for index, a in enumerate(accessories,start=1):
    print ("配件: %s Price: %s"\
           %(a,prices[index+len(cars)]))

输出:

车: Aston 价格: 570000$
车: Audi 价格: 68000$
车: McLaren 价格: 450000$
配件: GPS kit 价格: 8900$
配件: Car repair-tool kit 价格: 4500$

ii)zip函数(两个迭代器都将在单个循环结构中使用):
此函数在第i个位置组合相似类型的迭代器数据项。它在较短迭代器完成遍历后就结束了,较大长度迭代器的其他项目将被跳过不进行迭代。如果迭代器为空,则返回No输出。
例如,对两个列表(重复)使用zip有助于将单个汽车及其所需的附件组合在一起。

# Python代码展示如何使用zip
# 两个lists
cars = ["Aston", "Audi", "McLaren"]
accessories = ["GPS", "Car Repair Kit",
               "Dolby sound kit"]
# 合并list并打印
for c, a in zip(cars, accessories):
    print "Car: %s, Accessory required: %s"\
          %(c, a)

输出:

Car: Aston, Accessory required: GPS
Car: Audi, Accessory required: Car Repair Kit
Car: McLaren, Accessory required: Dolby sound kit/* Your code... */

 
枚举函数和zip函数的使用有助于在Python中实现迭代逻辑的有效扩展,并解决了巨大任务或问题的更多子问题。

# Python展示如何使用unzip (zip的逆操作),并且使用 *
# Unzip lists
l1,l2 = zip(*[('Aston', 'GPS'),
              ('Audi', 'Car Repair'),
              ('McLaren', 'Dolby sound kit')
           ])
# 打印unzipped lists
print(l1)
print(l2)          %(c, a)

输出:

('Aston', 'Audi', 'McLaren')
('GPS', 'Car Repair', 'Dolby sound kit')/* Your code... */