通过2个变量同时遍历List

时间:2018-10-02 18:24:25

标签: python list

我正在处理遍历列表的代码,例如:

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,我该怎么办?

3 个答案:

答案 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)