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

2 投票
3 回答
2601 浏览
提问于 2025-04-17 11:58

我需要一个像这样的列表:

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

但是要长得多、长得多。这份列表里有一些非常大的范围模式,但也有一些不规则的地方。所以写下所有的组合是不现实的,但我也不能简单地用列表推导式。

我想用:

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

但是根据文档,[x, y for ...] 是不被允许的,我的例子被理解成了两个带括号的元组,而不是一个元组后面跟着一个列表推导式。

有什么解决办法吗?

3 个回答

1

你可以先创建几个独立的列表,然后把它们一个个加到一起。

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)
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)]
5

试试这个:

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

撰写回答