簡體   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