ruby 打印出数组的数组中元素的所有组合[duplicate]

rhfm7lfc  于 2023-02-22  发布在  Ruby
关注(0)|答案(3)|浏览(179)
    • 此问题在此处已有答案**:

(17个答案)
八年前就关门了。
假设您有以下内容

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

在python或ruby中,打印出内部元素的所有组合的最佳方式是什么?
所以结果看起来像这样:

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

这将导致一个更通用的方法来解决典型的面试类型的问题,如"打印一个电话号码的所有字母组合"或"打印数字x的位图"
不管怎样,你有什么想法?

iibxawm4

iibxawm41#

我会在 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]
ldfqzlk8

ldfqzlk82#

在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)])
cgh8pdjw

cgh8pdjw3#

x = [[1,2,3], [4,5,6], [7,8,9]]
x.shift.product(*x).map(&:join)

相关问题