【问题标题】: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
  • 哇,搜索了,没有看到列表一,猜想用数组这个词把它扔掉了。

标签: python ruby arrays numbers


【解决方案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)

【讨论】:

  • 我知道这个答案是正确的,但您需要提供更多信息来解释它
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 2012-06-09
  • 2020-12-26
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2015-08-03
相关资源
最近更新 更多