【问题标题】:Creating a special list of unique elements创建独特元素的特殊列表
【发布时间】:2020-06-03 22:56:01
【问题描述】:

我有一个这样定义的列表

Q_opt_sc = [156910.6415400822, 4751.550104625496, 9088.02683003525, 14715.639401878929, 21303.41462556098, 28596.689807940442]

有 6 个元素。我需要在 python 上创建一个唯一重复项的列表。每个重复项有 6 个元素(来自上面的列表),每个元素要么取上面列表的元素,要么取 0。

换句话说,我需要一个所有重复类型的列表

duplicate_i = [[0 or Q_opt_sc[0]], [0 or Q_opt_sc[1]], 
               [0 or Q_opt_sc[2]], [0 or Q_opt_sc[3]],
               [0 or Q_opt_sc[4]], [0 or Q_opt_sc[5]], 
               [0 or Q_opt_sc[6]]]

list_of_all_duplicates = [duplicate_1, duplicate_2, ..., duplicate_n]

【问题讨论】:

  • 我认为“重复”在这里可能不是正确的词。您是指可以通过为 0 <= i < 6 选择 0 或 Q_opt_sc[i] 来构建所有唯一的 6 元素列表吗?
  • 是的,我认为你的解释是正确的

标签: python list unique


【解决方案1】:

可以使用itertools.product() 创建单独的元素来描述索引是使用列表还是使用零。 [0,0,0,0,0,0], [0,0,0,0,0,1]....

然后根据产品元素的设置新建一个列表。

from itertools import product

Q_opt_sc = [156910.6415400822, 4751.550104625496, 9088.02683003525, 14715.639401878929, 21303.41462556098, 28596.689807940442]

list_of_all_duplicates = [[Q_opt_sc[i] if select else 0 for i,select in enumerate(e)] for e in product([0,1], repeat=6)]
print(list_of_all_duplicates[50])   # just to see one of them.

输出

[156910.6415400822, 4751.550104625496, 0, 0, 21303.41462556098, 0]

【讨论】:

  • 非常非常非常感谢你!这正是我想要的!
  • 如果答案对您有用,请确保您通过点击绿色复选标记接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2017-10-27
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多