【发布时间】:2020-06-17 00:49:09
【问题描述】:
我正在尝试创建一个以元组作为元素的列表。每个元组有 4 个整数。前 2 个整数是压缩 2 个ranges 的结果,而另外 2 个来自 2 个不同的整数。
我正在使用此代码创建元组和最终列表,该列表源自笛卡尔积,如下所示:Get the cartesian product of a series of lists?
import itertools
first_range = list(zip((10**exp for exp in range(0,7)),(10**exp for exp in range(1,8))))
second_range = list(zip((5*10**exp if exp != 1 else 10**2 for exp in range(1,8)),(5*10**exp for exp in range(2,9))))
final_list = list(itertools.product(first_range,second_range))
这段代码的问题是最终结果看起来像这样:
[((1, 10), (100, 500)), ((1, 10), (500, 5000)), ((1, 10), (5000, 50000)), ((1, 10), (50000, 500000)), ((1, 10), (500000, 5000000)), ((1, 10), (5000000, 50000000)), ...
每个列表元素是一个包含 2 个其他元组的元组,而我想要的是:
[(1, 10, 100, 500), (1, 10, 500, 5000), (1, 10, 5000, 50000), (1, 10, 50000, 500000), (1, 10, 500000, 5000000), (1, 10, 5000000, 50000000), ...
即每个列表元素都是一个包含 4 个整数的元组。
任何想法将不胜感激。必须在 python3 上工作。 编辑:感谢 ShadowRanger 的 cmets,更新了代码的非工作部分
【问题讨论】:
-
旁注:
exp is not 1是错误的。由于int缓存很小,它可能在 CPython 上 99% 的时间都有效,但这是一个你不应该依赖的实现细节。is/is not仅适用于语言保证的单例(例如None、NotImplemented),而不是ints。你想要exp != 1。 -
@ShadowRanger 感谢您的信息。
标签: python python-3.x tuples cartesian-product