繁体   English   中英

修改Python3中包含集合的集合列表

[英]Modify list of sets containing sets in Python3

我正在尝试创建一个以元组为元素的列表。 每个元组有 4 个整数。 前 2 个整数是压缩 2 个ranges的结果,而其他 2 个来自 2 个不同的整数。

我正在使用此代码创建元组和最终列表,该列表源自笛卡尔积,如下所示: 获取一系列列表的笛卡尔积?

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 的评论,更新了代码的非工作部分

所以,一旦我发布了这个问题,我就确信我已经接近答案了,但我没有意识到我已经接近答案了。 解决额外元组问题的方法是:

import itertools
first_range = zip((10**exp for exp in range(7)),(10**exp for exp in range(1,8)))
second_range = 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)))
iterator_of_tuples = itertools.product(first_range,second_range)

# the next line solves my issue
final_list = [x + y for x, y in iterator_of_tuples]

我所做的是简单的元组合并: 如何在 Python 中合并两个元组? . 不知道为什么我没有早点想到

编辑:根据 ShadowRanger 的输入更新了答案

您的预期输出不是两个范围的笛卡尔积。

如果你希望你的预期输出是这样的:

final_list = [(*x, *y) for x, y in zip(first_range, second_range)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM