【问题标题】:How to generate new permutations in Python?如何在 Python 中生成新的排列?
【发布时间】:2019-10-10 19:19:14
【问题描述】:

我有一个问题;可能答案很简单,但我找不到。

我创建了一个函数,它工作正常。

x = 100
y = 100
A = (x ,y)

由于我手动定义了 x 和 y,所以这里没有问题;但问题是,我希望在函数中尝试所有可能的 (x, y) 排列。让我们假设:

B = [(1,1), (1,2), (1,3), ...(99,99)]

那么我该如何进行迭代:

for i in B:
    i == A

这可能是一个不好的方法,但我相信你明白我的意图。

从现在开始谢谢。

编辑:

这是函数:

K = []
L = []
M = []

def F():

    x = 100
    y = 100

    A = (x, y)

    for i in range(1, x):
        if x % i == 0:
            K.append((i))

    for j in range(1, y):
        if y % j == 0:
            L.append((j))

    P = sum(K[0:])
    R = sum(L[0:])

    if P == y and R == x:
        M.append(A)

    print(K, L)
    print(M)

F()

【问题讨论】:

  • 你的功能在哪里/具体是什么?
  • 对不起我的英语水平。我想说的是,我必须手动给 x 和 y 值。我需要它们在指定范围内自动化。
  • 您不想要排列(这是 n 对象的可能排序)。您只需要集合 {1, 2, ..., 99} 的乘积(或者可能是 2 项组合的集合,从您的 B 示例中不清楚)
  • 使用for combination in itertools.product(range(1, 100), repeat=2): ...。我不确定它是否有意,但您的函数会修改全局变量,因此多次运行它不会像您预期的那样工作。

标签: python permutation


【解决方案1】:

您想要一种产品:

>>> import itertools
>>> list(itertools.product(range(1,5), repeat=2))
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]

或组合列表(仅当 x == y 时):

>>> list(itertools.combinations(range(1,5), 2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

或者如果x 和y 不同:

>>> list(itertools.product(range(1,5), range(1,4)))
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3), (4, 1), (4, 2), (4, 3)]

【讨论】:

  • 第一个是我需要的。但是我怎样才能使A(x,y)和产品列表之间的关系?我的意思是我怎样才能为A做一个循环? A(1) = (1,1); A(2) = (1,2); A(3) = (1,3)... 等等?
  • enumerate(product(...))?
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2021-03-25
  • 2020-05-20
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
相关资源
最近更新 更多