【问题标题】:Array calculation in PythonPython中的数组计算
【发布时间】:2017-12-23 05:46:54
【问题描述】:

我想知道我是否可以使用python编写一个关于这个问题的程序。 我有三个数组:

A = ['a1','a2','a3','a4','a5','a6']
B = ['b1','b2','b3','b4','b5','b6']
C = ['c1','c2','c3','c4','c5','c6']

我需要一次从每个数组中获取一个元素,将它们放在一起并打印出来,例如'a1b1c1'。

无论顺序如何,每个分组元素只能出现一次。

每个元素必须与每轮中其他两个数组中的新元素组合在一起。 例如,在第一个循环中,'a1','b1','c1'被选中,在接下来的轮次中,如果'a1'被再次选中,'b1'和'c1'都不能被选中。 如何在 Python 中编写循环并打印所有可能的结果?谢谢。

A = ['a1','a2','a3','a4','a5','a6']
B = ['b1','b2','b3','b4','b5','b6']
C = ['c1','c2','c3','c4','c5','c6']

for i in range(len(A)):
    a=A[i]
    for j in range(len(B)):
        b=B[j]
        for h in range(len(C)):
            c=C[h]
            print a+b+c

让我以包含 3 个元素的 3 个数组为例,因为 6 个元素的列表太长了。

预期结果: a1,b1,c1

a1,b2,c2

a1,b3,c3

a2,b1,c2

a2,b2,c3

a2,b3,c1

a3,b1,c3

a3,b2,c1

a3,b3,c2

【问题讨论】:

  • 投反对票,因为您没有提到您为此付出的任何努力。请发布您的代码。
  • 我不确定我是否明白你的问题,但你可能想看看itertools 或者itertools.permutations
  • 您需要明确您的预期输出是什么。我认为您可以使用itertools.productitertools.combinations 做您想做的事,但这很难说。顺便说一句,您可能因为您的问题不清楚并且没有发布自己的代码尝试而获得了这些反对意见。
  • 我想我已经知道你想做什么,但我仍然不确定。如果'a1b1c1'已经被打印出来,是否允许'a2b1c1'? IOW,我想你是说如果我们打印了“a1b1c1”,那么“axb1c1”、“a1byc1”或“a1b1cz”对于任何其他 x、y 或 z 都不合法。那是对的吗?如果是这样,则列表中的一组有效组合包含 28 个三元组。
  • 嗨,下午 2 环。是的,如果'a1b1c1'已经被打印出来,'a1','b1','c1'的任意两个的组合应该不会出现。

标签: python arrays


【解决方案1】:

更正: ok,在对问题进行了更清晰的解释后,我认为这更像你需要的:

import random
for strA in A:
    l = len(B)
    nB = random.randrange(l)
    nC = random.randrange(l)
    for i in range(l):
        posB = (i + nB)%l
        posC = (i + nC)%l
        print(strA + B[posB] + C[posC])

它获取 A 的每个元素,并按顺序附加 B 和 C 的一个元素,但从随机位置开始,不重复。是这个吗?

【讨论】:

  • 您可以使用单个for 循环和itertools.product 来执行此操作,而不是三个for 循环。但是,这可能 不是 OP 想要的,因为问题指出,如果生成了“a1b1c1”,则以后不会包含“a1”的输出可以包含“b1”或“c1”。
  • 他基本上想要所有的 a、b 和 c 组合,所以这就是他得到的
  • 不,他想要所有的 a、b 和 c 组合。 “在第一个循环中,'a1'、'b1'、'c1' 已被选中,在接下来的几轮中,如果再次选择了 'a1',则不能选择 'b1' 和 'c1'”。但仍不完全清楚他真正确实想要什么。
  • 嗨神罗,这是我尝试的第一件事。我认为 PM 2Ring 解释得很清楚。
  • 老实说,我认为您应该清楚地解释您想要输出的内容,因为用人类语言解释可能会令人困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2014-09-21
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多