同时从列表中获取两个元素

问题描述 投票:1回答:4

我是python的新手,我想以[s-> (s0,s1)(s1,s2)(s2,s3)(s3,s4)....的方式同时迭代同一列表中的两个元素

我已经尝试过使用itertools,但它以以下方式s-> (s0,s1)(s2,s3)(s4,s5).....打印。

我该怎么办?

def pairwise(iterable):
    a = iter(iterable)
    return itertools.zip_longest(a,a)

for x,y in pairwise(combined):
...

我使用的代码,但未按要求显示结果。请先谢谢您

python python-3.x itertools
4个回答
1
投票

使用您可以为此使用zip

list_ = [i  for i in range(10)]
result =[(a,b) for a,b in zip(list_,list_[1:])]
print(result)

输出

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]

如果您想比这里快一点的话

list_ = [i  for i in range(10)]
result= = [(list_[i],list_[i-1]) for i in range(1,len(list_))]
print(result)

输出

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]

0
投票

zip在这种情况下确实非常昂贵。您可以使用局部变量

l = range(10)

a = l[0];
for b in l[1:]:
    print(a, b)
    a = b

给予:

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

当然您可以修复l[1:]以防止复制


0
投票

您可以尝试这个

l1 = ["s0","s1","s2","s3","s4"]
l2 = []
if(len(l1) <= 1):
    l2 = l1
else:
    for i in range(len(l1)-1):
        l2.append([l1[i],l1[i+1]])
print l2

0
投票

使用pairwise itertools recipe,会产生重叠的对:

给出

itertools

代码

import itertools as it

Demo

def pairwise(seq):
    """s -> (s0,s1), (s1,s2), (s2,s3), ..."""
    a, b = it.tee(seq)
    next(b, None)
    return zip(a, b)

另请参见>>

  • [list(pairwise(["s0", "s1", "s2", "s3"])) # [('s0', 's1'), ('s1', 's2'), ('s2', 's3')] :实现more_itertoolsmore_itertools package等的第三方pairwise
© www.soinside.com 2019 - 2024. All rights reserved.