Python значения нескольких списков в одном понимании списка - PullRequest
12 голосов
/ 22 марта 2012

Есть ли какой-нибудь умный способ написать понимание списка для более чем одного списка?

Я знаю, что мог бы использовать отдельный список диапазонов в качестве индекса, но таким образом я должен знать длину (или получить ее отдельно с помощью вызова функции len()).

>>> a = range(10)
>>> b = range(10, 0, -1)
>>> [(a[x],b[x]) for x in range(10)]
[(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)]

Я бы хотел иметь что-то вроде этого:

>>> [(a,b) for a in range(10) and b in range(10, 0, -1)]
[(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)]

Как бы вы написали понимание списка? Есть ли способ сделать это с помощью itertools?

Список диапазонов просто обозначает любой список, и я не обязательно хочу получить кортеж. также может быть функция, которая принимает a и b в качестве параметров. Так что почтовый индекс не то, что я хочу.

ОБНОВЛЕНИЕ: с "Так что почтовый индекс не то, что я хочу". Я имел в виду, что я не хочу zip(range(10), range(10, 0, -1))

Ответы [ 2 ]

20 голосов
/ 22 марта 2012

Ваш пример просто:

zip(range(10), range(10, 0, -1))

В общем, вы можете присоединиться к любому набору итераций, используя zip:

[func(a, d, ...) for a, b, ..., n in zip(iterable1, iterable2, ..., iterableN)]
1 голос
/ 22 марта 2012

Если вы хотите применить функцию к нескольким последовательностям, вам понадобится либо map, либо itertools.imap:

map(lambda *x: sum(x), range(10), range(10, 0, -1), range(0,20, 2))

. Не нужно выполнять архивирование, если вы не хотите выполнять отображение в спискепонимание

...