【问题标题】:Creating all possible combinations from two arrays从两个数组创建所有可能的组合
【发布时间】:2020-02-29 13:20:34
【问题描述】:

我正在想办法解决以下问题:

给定任意两个数组 'a' 和 'b' 我想创建所有组合列表,每个组合应该包含来自 'a' 的一个元素和来自 'b' 的一个元素的元组

例如:

a = ['p', 'q'], b = [True, False]

输出应该如下:

[{'p': False, 'q': False}, {'p': False, 'q': True}, {'p': True, 'q': 
False}, {'p': True, 'q': True}]

【问题讨论】:

  • 你能在你的帖子中附加两个数组'a'和'b'吗?
  • 我可能可以追加它们,没有真正的限制,我只是在寻找效率
  • 你在寻找itertools library,我不认为你会在 python 中找到更高效的东西
  • 我一直在尝试使用该库中的产品功能。但我想不出一种方法来制作我想要的东西,而不必迭代产品并删除重复的值
  • @ItamarMushkin 很遗憾,不,这会让我遇到和以前一样的问题。我必须清除我不需要的不良组合。

标签: python arrays iterable


【解决方案1】:

你可以使用itertools.productrepeat=2

这是一个构建字典列表的工作示例

[{k1:v1, k2:v2} for k1,v1,k2,v2 in itertools.product(a,b,repeat=2) if k1 != k2]

【讨论】:

  • 我会补充一点,虽然这个解决方案需要考虑长度为 2 我给出的只是一个例子。 a 可以是任意长度,b 在我的情况下可以是长度 2 但我想假设一个一般情况
【解决方案2】:
from itertools import product

dicts = [{k:v for k,v in zip(keys, tup)} for tup in list(product(values, repeat=len(keys)))]

【讨论】:

  • OP - 请注意,这个答案并不依赖于知道长度都是 2!
  • 这样就完成了。但是它确实假设值和键的数量应该相同,遗憾的是我可以拥有比值更多的键
  • @edanpatt 我更新了我的答案,现在不需要相等的长度
【解决方案3】:
a = ['p', 'q']

b = [True, False]
import itertools
result = [{values[0]: values[1]} for values in list(itertools.product(a,b))]

print(result)

这是你需要的吗?

【讨论】:

  • 这是一个不错的开始,但不,在这样做之后,您必须创建此函数创建的字典的所有可能组合
【解决方案4】:
from itertools import product
lst = [dict(zip(a,pair)) for pair in product(b,b)]

输出:

[{'p': True, 'q': True},
 {'p': True, 'q': False},
 {'p': False, 'q': True},
 {'p': False, 'q': False}]

编辑:

既然你说a 可以是任意长度,那么你就不需要b

from itertools import permutations
import numpy as np

a = ['p','q','r','s','t']
list1 = list(permuations(a))
set1 = {tuple(np.array(a) == np.array(i)) for i in list1}
final_list = [dict(zip(a,i)) for i in set1]

输出:

[{'p': True, 'q': False, 'r': False, 's': False, 't': False},
 {'p': True, 'q': False, 'r': True, 's': True, 't': False},
 {'p': False, 'q': False, 'r': False, 's': False, 't': True},
 {'p': True, 'q': False, 'r': True, 's': False, 't': False},
 {'p': False, 'q': False, 'r': True, 's': True, 't': True},
 {'p': True, 'q': False, 'r': False, 's': True, 't': False},
 {'p': False, 'q': False, 'r': False, 's': True, 't': True},
 {'p': False, 'q': False, 'r': True, 's': False, 't': True},
 {'p': False, 'q': True, 'r': False, 's': False, 't': False},
 {'p': False, 'q': True, 'r': True, 's': True, 't': False},
 {'p': False, 'q': True, 'r': False, 's': True, 't': False},
 {'p': False, 'q': True, 'r': True, 's': False, 't': False},
 {'p': True, 'q': True, 'r': True, 's': False, 't': False},
 {'p': True, 'q': True, 'r': False, 's': True, 't': False},
 {'p': True, 'q': True, 'r': False, 's': False, 't': False},
 {'p': True, 'q': True, 'r': False, 's': False, 't': True},
 {'p': True, 'q': False, 'r': False, 's': True, 't': True},
 {'p': True, 'q': False, 'r': True, 's': False, 't': True},
 {'p': False, 'q': False, 'r': False, 's': True, 't': False},
 {'p': False, 'q': False, 'r': True, 's': False, 't': False},
 {'p': True, 'q': False, 'r': False, 's': False, 't': True},
 {'p': False, 'q': False, 'r': False, 's': False, 't': False},
 {'p': False, 'q': False, 'r': True, 's': True, 't': False},
 {'p': False, 'q': True, 'r': False, 's': True, 't': True},
 {'p': False, 'q': True, 'r': True, 's': False, 't': True},
 {'p': True, 'q': True, 'r': True, 's': True, 't': True},
 {'p': False, 'q': True, 'r': False, 's': False, 't': True}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多