Python多列表推导包含一个列表中的元组范围

时间:2012-01-30 18:14:15

标签: python list tuples list-comprehension

我需要一个这样的列表:

[(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 ...]是不被允许的,我的例子被解释为2个括号元组的无特征元组,而不是元组后跟列表理解。

任何解决方案?

3 个答案:

答案 0 :(得分:4)

试试这个:

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

答案 1 :(得分:1)

如果您试图在每个新范围内增加第二个索引,那么您的问题就不清楚了。

如果是这种情况,您可以将所有范围放在列表中并使用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)]

答案 2 :(得分:0)

您可以创建单独的列表,然后将它们相互追加。

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)