开发者社区> 问答> 正文

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

我试图创建一个以元组为元素的列表。每个元组都有4个整数。前两个整数是对2个range进行压缩的结果,而其他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\*0\*exp if exp != 1 else 10\*2 for exp in range(1,8)),(5\*0\*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的评论,更新了代码的无效部分

问题来源:stackoverflow

展开
收起
is大龙 2020-03-25 09:21:58 3433 0
1 条回答
写回答
取消 提交回答
  • 因此,可以肯定的是,一旦我发布了这个问题,我就已经接近答案了,但是我没有意识到我已经接近了答案。使用额外的元组解决此问题的方法是:

    import itertools
    first_range = zip((10\*exp for exp in range(7)),(10\*exp for exp in range(1,8)))
    second_range = zip((5\*0\*exp if exp != 1 else 10\*2 for exp in range(1,8)),(5\*0\*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的输入更新了答案

    回答来源:stackoverflow

    2020-03-25 09:22:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载