Соберите каждую пару элементов из списка в кортежи в Python

Возможный дубликат:
Пары из одного списка

У меня есть список небольших целых чисел, например:

[1, 2, 3, 4, 5, 6]

Я хочу собрать последовательные пары и вернуть новый список, содержащий кортежи, созданные из этих пар, то есть:

[(1, 2), (3, 4), (5, 6)]

Я знаю, что должен быть действительно простой способ сделать это, но не может его полностью решить.

Спасибо

Ответ 1

Ну есть один очень простой, но довольно хрупкий способ, застегните его нарезанные версии самого себя.

zipped = zip(mylist[0::2], mylist[1::2])

Если вы не знали, последним параметром среза является "шаг". Поэтому мы выбираем каждый второй элемент в списке, начиная с нуля (1, 3, 5). Затем мы делаем то же самое, но начинаем с одного (2, 4, 6) и делаем кортежи из них с помощью zip.

Ответ 2

Прямо из документации Python модуля itertools:

from itertools import tee, izip

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

l = [1, 2, 3, 4, 5, 6]
for pair in pairwise(l):
    print pair

Ответ 3

Помимо вышеупомянутых ответов, вам также нужно знать простейший путь (если вы еще не знали)

l = [1, 2, 3, 4, 5, 6]
o = [(l[i],l[i+1]) for i in range(0,len(l),2)]

Ответ 4

Помимо вышеупомянутых ответов, вам также нужно знать простейший путь (если вы еще не знали)

l = [1, 2, 3, 4, 5, 6]
o = [(l[i],l[i+1]) for i in range(0,len(l)-2,2)]

здесь должно быть o = [(l[i],l[i+1]) for i in range(0,len(l),2)], поскольку range(0, len(l) - 2, 2) будет генерировать только 0 и 2