我需要一个这样的列表:
[(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个括号元组的无特征元组,而不是元组后跟列表理解。
任何解决方案?
答案 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)