【问题标题】:Python: How to find every possible combination of three elements taken together in n long listPython:如何在 n 个长列表中找到三个元素的所有可能组合
【发布时间】:2021-01-09 16:46:05
【问题描述】:

我们有一个列表[a_1, a_2, a_3,..., a_n],我们还有一个函数f(x_1,x_2,x_3)

函数的作用对我的问题并不重要。

在函数参数中,我们需要从列表中输入三个元素。我们需要重复这个过程,直到三个元素的所有可能选择都被该函数处理,它们被选择的顺序无关紧要。

4 个元素的示例:

list = [a_1, a_2, a_3, a_4]
result = []
result.append(f(a_1, a_2, a_3))
result.append(f(a_1, a_2, a_4))
result.append(f(a_2, a_3, a_4))
result.append(f(a_4, a_3, a_1))

只是现在我们有 n 个元素。如何自动化查找这些组合的过程。我们不能使用任何花哨的进口。我们只能使用 Math 和 Random 导入,不能使用其他。

【问题讨论】:

  • 好的,您是否尝试过任何方法来开始解决问题?你到底是在哪里卡住的?
  • 这只是我要解决的问题的一部分,这也是我卡住的地方。
  • @Higs "我们只能使用数学和随机导入"

标签: python list combinations permutation


【解决方案1】:

试试这个:

def comb(m):
    l=m.copy()
    result = []
    while len(l)>3:
        for i in range(1,len(l)-1):
            for k in range(i+1, len(l)):
                result.append(f(l[0], l[i], l[k]))
        l=l[1:]
    result.append(f(l[0], l[1], l[2]))
    return result

【讨论】:

  • 请注意,这将删除作为参数传递的列表中除了最后两项之外的所有项目,这可能不是一件好事......
【解决方案2】:

在寻找组合时,itertools 可以完成工作

lst=[i for i in range(1, 5)]

[1, 2, 3, 4]

[i for i in combinations(lst, 3)]
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

【讨论】:

  • "我们只能使用数学和随机导入"
  • 我认为这也适用于 python 中的 math.comb(n, k) 对吗?
  • @BiliDebili 看看文档:“math.comb(n, k) 返回从 n 项中选择 k 项的方法数,不重复且不按顺序。”。所以根本不是你想要的。
  • 为什么不使用 itertools?它是一个内置库,并且定义另一个执行相同操作的函数与库的功能相反。
  • 我想我也可以使用它,我认为这是一个比实际更容易的问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2021-01-06
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
相关资源
最近更新 更多