下面是使用迭代器的不同方法。C风格的方法:这种方法需要事先知道迭代的总次数。
# 访问列表元素的 C 风格方式 cars = ["Aston", "Audi", "McLaren"] i = 0 while (i < len(cars)): print cars[i] i += 1
输出
Aston Audi McLaren
重点:
- Python 程序很少使用这种循环方式。
- 这种4步方法不会产生单视图循环构造的紧凑性。
- 这在大型程序或设计中也容易出错。
- Python中没有C风格的for循环,即类似于for(int I=0;I
使用for-in或for each样式: 他的风格用于Python中,包含列表、字典、n维数组等的迭代器。迭代器在循环时获取每个组件并打印数据。迭代器在此构造中自动递增/递减。
# 使用 for-in 循环访问项 cars = ["Aston", "Audi", "McLaren"] for x in cars: print x
输出:
Aston Audi McLaren
使用range函数索引:我们还可以在Python中使用range()索引。
# 使用索引和 for-in 访问项 cars = ["Aston", "Audi", "McLaren"] for i in range(len(cars)): print cars[i]
输出:
Aston Audi McLaren
enumerate:enumerate是一个内置的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)
输出
Aston Audi 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))
输出 :
<enumerate object at 0x7fe4f914d3c0>
Enumerate采用参数Start,该参数默认设置为零。我们可以将此参数更改为我们喜欢的任何值。在下面的代码中,我们使用了start as 1。
# 演示如何在枚举中使用start cars = ["Aston" , "Audi", "McLaren "] for x in enumerate(cars, start=1): print (x[0], x[1])
输出
(1, 'Aston') (2, 'Audi') (3, 'McLaren ')
enumerate() 帮助嵌入解决方案,以访问迭代器中的每个数据项并获取每个数据项的索引。
循环扩展名:
i) 两个迭代器用于单个循环构造:在这种情况下,列表和字典将用于使用枚举函数的单个循环块中的每个迭代。让我们看一个例子。
# 两个单独的列表 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 "Car: %s Price: %s" % (c, prices[index]) # 输出附件价格 for index, a in enumerate(accessories, start=1): print("Accessory: %s Price: %s" % (a, prices[index+len(cars)]))
输出
Car: Aston Price: 570000$ Car: Audi Price: 68000$ Car: McLaren Price: 450000$ Accessory: GPS kit Price: 8900$ Accessory: Car repair-tool kit Price: 4500$
ii) ZIP函数(两个迭代器都用于单个循环构造):此函数有助于在第I个位置组合相似类型的迭代器(列表-列表或命令-命令等)数据项。它使用这些输入迭代器中最短的长度。其他具有较大长度迭代器的项将被跳过。如果迭代器为空,则不返回任何输出。
例如,对两个列表(迭代器)使用ZIP有助于组合单个汽车及其所需的附件。
# Python程序来演示zip的工作原理 # 两个单独的清单 cars = ["Aston", "Audi", "McLaren"] accessories = ["GPS", "Car Repair Kit", "Dolby sound kit"] # 合并列表和打印 for c, a in zip(cars, accessories): print "Car: %s, Accessory required: %s"\ % (c, a)
输出
yaml
Car: Aston, Accessory required: GPS Car: Audi, Accessory required: Car Repair Kit Car: McLaren, Accessory required: Dolby sound kit
ZIP函数中的这些迭代器的反向操作称为使用“*”运算符进行解压缩。枚举函数和zip函数的使用有助于实现Python中迭代逻辑的有效扩展,并解决大型任务或问题的更多子问题。
# 使用*和zip函数演示unzip(zip的反向)的Python程序 # 解压缩列表 l1,l2 = zip(*[('Aston', 'GPS'), ('Audi', 'Car Repair'), ('McLaren', 'Dolby sound kit') ]) # 输出 unzipped 列表 print(l1) print(l2)
输出:
('Aston', 'Audi', 'McLaren') ('GPS', 'Car Repair', 'Dolby sound kit')