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

时间:2019-10-25 23:14:02

标签: python python-3.x itertools

我是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):
...

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

4 个答案:

答案 0 :(得分: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)]

答案 1 :(得分:1)

您可以尝试

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

答案 2 :(得分: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:]以防止复制

答案 3 :(得分:0)

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

给出

import itertools as it

代码

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')]

另请参见