Понимание нескольких списков Python, содержащих диапазоны кортежей в одном списке - PullRequest
1 голос
/ 30 января 2012

Мне нужен такой список:

[(16,2), (14,3), (15,3), (16,3), (18,3), (19,3), (12,4), (13,4), (14,4)]

Но намного, намного дольше.В этом списке есть действительно большие шаблоны диапазона , но также неровностей .Поэтому было бы невозможно записать все кортежи, но я не могу сделать простой listcomp.

Я хотел бы использовать:

[(16,2), (x,3) for x in range(14,19), (x,4) for x in range(12,14)] 

Но в соответствиидля документов [x, y for ...] не допускается, и мой пример интерпретируется как кортеж из двух скобок без скобок вместо кортежа, за которым следует понимание списка.

Есть ли решения?

Ответы [ 3 ]

4 голосов
/ 30 января 2012

Попробуйте это:

[(16, 2)] + [(x,3) for x in range(14,19)] + [(x,4) for x in range(12,14)]
1 голос
/ 30 января 2012

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

Если это так, вы можете поместить все диапазоны в список и использовать itertools.count():

from itertools import count
indexes = [(16,17), (14, 20), (12, 15)]

[(x, n) for i,n in zip(indexes,count(2)) for x in range(*i)]

, которые дают точно:

[(16, 2), (14, 3), (15, 3), (16, 3), (17, 3), (18, 3), (19, 3), (12, 4), (13, 4), (14, 4)]
0 голосов
/ 30 января 2012

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

a = [(16, 2)]
b = [(x, 3) for x in range(14, 19)]
c = [(x, 4) for x in range(12, 15)]
a.extend(b)
a.extend(c)
...