我是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):
...
我使用的代码,但未按要求显示结果。谢谢您
答案 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')]
另请参见
more_itertools
:实现package,itertools
pairwise
等的第三方recipes。