我正在处理遍历列表的代码,例如:
a = [1,2,3,4,5,6,7,8]
有8个元素(假设'a'总是有偶数),并且我想一次访问2,这意味着循环将执行4次。变量每次增加2,例如奇数和偶数
b =1
for i range(len(a)/2):
print(a[2*b-1],a[2*b])
b += 1
输出将是错误的,因为列表索引从0开始到3结束,并且列表索引将超出范围。这不会打印1和8,我该怎么办?
答案 0 :(得分:1)
对于最新版本的代码,最小修复(最接近原始解决方案)
b = 0
for i in range(len(a)/2):
print(a[2*b], a[2*b+1])
b += 1
更好的解决方案是
for i in range(len(a)/2):
print(a[2*i], a[2*i+1])
要处理均匀的长度,请使用range((len(a)+1)/ 2)
答案 1 :(得分:0)
我认为将2*i-1
更改为2*i+1
。这是一个简单的问题。
答案 2 :(得分:0)
通过使用iter
创建单个迭代器,然后使用其自身zip
创建单个迭代器,您可以不用担心索引编制就可以进行2到2的迭代。
这类似于grouper
function from itertools' recipes,并且具有能够处理任何可迭代对象的优点,包括未索引的对象(例如生成器)。
def iter_two_by_two(it):
it = iter(it)
yield from zip(it, it)
a = [1, 2, 3, 4, 5, 6, 7, 8]
for pair in iter_two_by_two(a):
print(pair)
(1, 2)
(3, 4)
(5, 6)
(7, 8)