python - 满足任意长度列表中的条件

标签 python list

我有一个任意长度的数字列表列表。

例如:

a = [[3,17,19,4],[4,18,10,1],[11,15,13],[7,9,12,16]]

嵌套层级限制在这个深度。

我想找到所有列表,其第一个元素来自第一个内部列表,其第二个元素来自第二个内部列表,依此类推,使得这个新列表的元素都是递增的。

根据给定的示例,[4, 10, 11, 12] 就是这样一个列表。

我很挣扎,因为我希望解决方案是通用的,独立于内部列表的数量。

如果保证我有四个内部列表,我可以天真地编写代码:

for w in a[0]:
    for x in a[1]:
        for y in a[2]:
            for z in a[3]:
                if w < x < y < z:
                    print [w,x,y,z]

但是如果我添加第五个内部列表,或者删除上面的第四个内部列表,我就不走运了。

无论主列表中有多少内部列表,我如何生成所有单调递增的“子列表”?

最佳答案

def combine(lists, peak=None):
  if not lists:
    yield []
  else:
    for i in lists[0]:
      if peak is None or i > peak:
        for tail in combine(lists[1:], i):
          yield [ i ] + tail

for x in combine([[3,17,19,4],[4,18,10,1],[11,15,13],[7,9,12,16]]): print x

[3, 4, 11, 12]
[3, 4, 11, 16]
[3, 4, 15, 16]
[3, 4, 13, 16]
[3, 10, 11, 12]
[3, 10, 11, 16]
[3, 10, 15, 16]
[3, 10, 13, 16]
[4, 10, 11, 12]
[4, 10, 11, 16]
[4, 10, 15, 16]
[4, 10, 13, 16]

关于python - 满足任意长度列表中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16450284/

相关文章:

python - 无法将打印功能输出发送到文件并在执行期间出错

python - 从元组中获取相同的元素并返回两个索引列表

python - 为什么 '.sort()' 在 Python 中导致列表为 'None'?

java - 单击“保存数据”按钮后,如何在共享首选项中保存复选框状态

java - 是否有一个带有索引、键和对象的 Map 对象? java

Python:如果列表元素的第一项发生变化,如何交替选择?

python - 在单元测试中修补时,Celery 任务调用的函数没有调用?

python - TensorFlow 1.0.0 的prepare_attention API 相当于tensorflow 1.2.0

Python:如何处理 CSV 中的缺失值?

Java - Python - Python 中是否有与 java 的 Character.getNumericValue 等效的东西?