打印出数组数组中元素的所有组合[重复]

Posted

技术标签:

【中文标题】打印出数组数组中元素的所有组合[重复]【英文标题】:Print out all combinations of elements in an array of arrays [duplicate] 【发布时间】:2014-05-05 03:03:24 【问题描述】:

假设你有以下情况

x = [[1,2,3], [4,5,6], [7,8,9]]

在 python 或 ruby​​ 中,打印出所有内部元素组合的最佳方法是什么?

所以结果应该是这样的:

147,
148,
149,
157,
158,
159,
167,
...

这将导致解决典型面试类型问题的更通用方法,例如“打印电话号码的所有字母组合”或“打印数字 x 的位图”。

无论如何,想法?

【问题讨论】:

在 Python 中使用 itertools.product 哇,搜索了,没有看到列表一,猜想用数组这个词把它扔掉了。 【参考方案1】:

我会在 Ruby 中做:

x = [[1,2,3], [4,5,6], [7,8,9]]
x.first.product(*x[1..-1]).map |ary| ary.join.to_i 
# => [147,
#     148,
#     149,
#     157,
#     158,
#     159,
#     167,
#     168,
#     169,
#     247,
#     248,
#     249,
#     257,
#     258,
#     259,
#     267,
#     268,
#     269,
#     347,
#     348,
#     349,
#     357,
#     358,
#     359,
#     367,
#     368,
#     369]

【讨论】:

...或x.shift.product(*x)... @CarySwoveland 那么源数组会丢失数据。所以我没有那样做。【参考方案2】:

在python中:

>>> x = [[1,2,3], [4,5,6], [7,8,9]]
>>> import itertools as it
>>> [x for x in it.product (*x) ]
[(1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 5, 7), (1, 5, 8), (1, 5, 9), (1, 6, 7), (1, 6, 8), (1, 6, 9), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 5, 7), (2, 5, 8), (2, 5, 9), (2, 6, 7), (2, 6, 8), (2, 6, 9), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 5, 7), (3, 5, 8), (3, 5, 9), (3, 6, 7), (3, 6, 8), (3, 6, 9)]

或者如果你想要整数:

>>> [int(''.join(str(x) for x in x)) for x in it.product(*x)]
[147, 148, 149, 157, 158, 159, 167, 168, 169, 247, 248, 249, 257, 258, 259, 267, 268, 269, 347, 348, 349, 357, 358, 359, 367, 368, 369]

或者没有字符串操作:

def makeNumber(t):
    sum (10 ** i * e for i, e in enumerate(t[::-1]))
x = [[1,2,3], [4,5,6], [7,8,9]]
print([makeNumber(x) for x in it.product(*x)])

【讨论】:

最终结果是我认为 OP 想要的数字 @ArupRakshit 添加了替代方案。【参考方案3】:
x = [[1,2,3], [4,5,6], [7,8,9]]
x.shift.product(*x).map(&:join)

【讨论】:

我知道这个答案是正确的,但您需要提供更多信息来解释它

以上是关于打印出数组数组中元素的所有组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

打印出二维字符串数组的函数[重复]

编写一个打印所有组合的通用函数。没有递归[重复]

在PHP中查找数组元素的所有可能的唯一组合[重复]

LeetCode 40 Combination Sum II(数组中求和等于target的所有组合)

AS3函数产生数组的组合,没有重复

打印一个numpy数组的所有列和行[重复]