【问题标题】:concatenating elements of n arrays with different array lengths and printing all possible outcomes连接具有不同数组长度的 n 个数组的元素并打印所有可能的结果
【发布时间】:2021-03-27 15:39:58
【问题描述】:

我正在尝试遍历具有不同长度的数组并将它们的元素相互连接并将所有可能的组合打印在一起!

示例代码:

arr1 = ["test", "what", "334"]
arr2 = ["_", "-", "#", "*", "()", "$"]
arr3 = ["adf", "ngdda"]

我希望输出由 arr1[element] + arr2[element] + arr3[element] 组成,它会有 3 x 6 x 2 = 36, 36 个结果。

由于数组长度不同,我不能使用一个 for 循环或 while 循环,因为 len(arr1) = 3,在计算 arr1 + arr2 + arr3 的可能结果时,我只能使用 i

如果能提供任何帮助,我将不胜感激!

【问题讨论】:

标签: python arrays algorithm


【解决方案1】:

你可以使用itertools内置模块https://docs.python.org/3.8/library/itertools.html#itertools.product中的product

输入迭代的笛卡尔积。

大致相当于生成器表达式中的嵌套 for 循环。为了 例如,product(A, B) 返回与 ((x,y) for x in A for y in B)。

from itertools import product

arr1 = ["test", "what", "334"]
arr2 = ["_", "-", "#", "*", "()", "$"]
arr3 = ["adf", "ngdda"]
results = ["".join(result) for result in product(arr1, arr2, arr3)]

print(len(results))
print(results)

输出

36
['test_adf', 'test_ngdda', 'test-adf', 'test-ngdda', 'test#adf', 'test#ngdda', 'test*adf', 'test*ngdda', 'test()adf', 'test()ngdda', 'test$adf', 'test$ngdda', 'what_adf', 'what_ngdda', 'what-adf', 'what-ngdda', 'what#adf', 'what#ngdda', 'what*adf', 'what*ngdda', 'what()adf', 'what()ngdda', 'what$adf', 'what$ngdda', '334_adf', '334_ngdda', '334-adf', '334-ngdda', '334#adf', '334#ngdda', '334*adf', '334*ngdda', '334()adf', '334()ngdda', '334$adf', '334$ngdda']

【讨论】:

  • 我相信OP希望将字符串组合成不同的组合,而不仅仅是获得组合。我也怀疑他是否被允许使用 itertools 来解决看似家庭作业的问题。
  • 是的,我看到你的回答后才意识到他们想加入他们。更新以反映这一点。
【解决方案2】:

这里是:

arr1 = ["test", "what", "334"]
arr2 = ["_", "-", "#", "*", "()", "$"]
arr3 = ["adf", "ngdda"]
result = []
for i in arr1:
    for j in arr2:
        for k in arr3:
            result.append(i+j+k)

print(len(result)) #36
print(result)
#['test_adf', 'test_ngdda', 'test-adf', 'test-ngdda', 'test#adf', 'test#ngdda', 'test*adf', 'test*ngdda', 'test()adf', 'test()ngdda', 'test$adf', 'test$ngdda', 'what_adf', 'what_ngdda', 'what-adf', 'what-ngdda', 'what#adf', 'what#ngdda', 'what*adf', 'what*ngdda', 'what()adf', 'what()ngdda', 'what$adf', 'what$ngdda', '334_adf', '334_ngdda', '334-adf', '334-ngdda', '334#adf', '334#ngdda', '334*adf', '334*ngdda', '334()adf', '334()ngdda', '334$adf', '334$ngdda']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2018-05-08
    • 2018-09-25
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多