我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.
我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.
码
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud) 我正在用Python编写程序,我意识到我需要解决的一个问题需要我,给定一个S带n元素(| S | = n)的集合来测试某个顺序的所有可能子集上的函数m(即m元素数量).要使用答案生成部分解,然后再次使用下一个阶m = m + 1,直到m = n.
我正在编写表单的解决方案:
def findsubsets(S, m):
subsets = set([])
...
return subsets
Run Code Online (Sandbox Code Playgroud)
但是知道Python我希望解决方案已经存在.
完成此任务的最佳方法是什么?
我试图找出将两个列表合并为所有可能组合的最佳方法.所以,如果我从这样的两个列表开始:
list1 = [1, 2]
list2 = [3, 4]
Run Code Online (Sandbox Code Playgroud)
结果列表如下所示:
[[[1,3], [2,4]], [[1,4], [2,3]]]
Run Code Online (Sandbox Code Playgroud)
也就是说,它基本上产生一个列表列表,其中包含两者之间的所有潜在组合.
我一直在研究itertools,我很确定答案,但是我无法想出办法让它以这种方式行事.我最接近的是:
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
print list(itertools.product(list1, list2))
Run Code Online (Sandbox Code Playgroud)
哪个产生:
[(1, 5), (1, 6), (1, 7), (1, 8), (2, 5), (2, 6), (2, 7), (2, 8), (3, 5), (3, 6), (3, 7), (3, 8), (4, 5), (4, 6), (4, 7), (4, 8)]
Run Code Online (Sandbox Code Playgroud)
因此,它会在每个列表中执行所有可能的项目组合,但不是所有可能的结果列表.我怎么做到这一点?
编辑:最终目标是能够单独处理每个列表以确定效率(我正在使用的实际数据更复杂).因此,在上面的原始示例中,它将工作如下:
list1 = [1, 2]
list2 = [3, 4]
Get first merged list: [[1,3], [2, …Run Code Online (Sandbox Code Playgroud)