получить два элемента из списка одновременно - PullRequest
1 голос
/ 26 октября 2019

Я новичок в 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 ]

1 голос
/ 26 октября 2019

Вы можете попробовать это

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
1 голос
/ 26 октября 2019

используйте, вы можете использовать zip для этого

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

output

[(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)

output

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
0 голосов
/ 26 октября 2019

Используйте рецепт pairwise itertools , который дает перекрывающиеся пары:

Дано

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

См. Также

0 голосов
/ 26 октября 2019

почтовый индекс действительно довольно дорог в этом случае. Вы можете использовать локальную переменную

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:], чтобы предотвратить копирование

...