打印出数组数组中元素的所有组合[重复]
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)
【讨论】:
我知道这个答案是正确的,但您需要提供更多信息来解释它以上是关于打印出数组数组中元素的所有组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章