生成相邻子集序列(从列表列表)

2024-04-29 09:20:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个矩阵(数组数组)的形式

[1, 2, 3, 4]
[12, 23, 34]
[123, 234]
[1234]

并希望生成这个矩阵的序列,这些序列相互跟随,并且(转换为字符串)与索引0处的数组长度相同(最上面)。也就是说,结果是

^{pr2}$

我想要实现的是得到一个字符串的所有部分,这些部分可以直接相互连接并拆分I子数组(如示例所示)。在

实现语言与此无关,但最好使用Python、java、ruby、C#、clojure、Psudo代码或其他相当高级别的语言。在


Tags: 字符串代码语言示例序列矩阵数组java
3条回答

下面是一个Python版本(编辑了以使其更简洁;多亏了FMc的建议):

def consecutive_slice(arr):
    yield arr
    mx = len(arr) + 1
    for size in xrange(2, mx):
        for i in xrange(mx - size):
            yield(arr[:i] + [''.join(arr[i:i+size])] + arr[i+size:])

使用示例:

^{pr2}$
def adj(ar)
  result = [ar]
  2.upto ar.size do |j|
    0.upto ar.size-j do |i|
      result << [*ar[0, i], ar[i,j].join.to_i, *ar[i+j..-1]]
    end
  end
  result
end

试验

^{pr2}$

编辑

如果你想让它与Ruby1.8.7兼容(上面是1.9+)

def adj(ar)
  result = [ar]
  2.upto ar.size do |j|
    0.upto ar.size-j do |i|
      result << [ar[0, i], ar[i,j].join.to_i, ar[i+j..-1]].flatten
    end
  end
  result
end

a = (1..5).to_a
adj a
#=> same result

我改进了之前的代码。

a = ["1", "2", "3", "4"]

['', '.'].repeated_permutation(a.length - 1).map{|b| a.zip(b).join.split('.')}

会给你:

^{pr2}$

相关问题 更多 >