如何从一组列表中获取笛卡尔积(每种可能的值组合)?
输入:
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
Run Code Online (Sandbox Code Playgroud) 我有两个要压缩的列表
清单 A:
["hello ", "world "]
Run Code Online (Sandbox Code Playgroud)
名单乙:
["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)
我想像这样压缩列表中的元素:
[("hello","one")
("hello","two")
("hello","three")
("world","one")
("world","two")
("world","three")]
Run Code Online (Sandbox Code Playgroud)
显然,我可以使用 double for 循环并附加元素,但我想知道这样做的好的 pythonie 方法是什么?
给定一个列表列表,例如:
[['a', 'b'], ['c', 'd'], ['e']]
Run Code Online (Sandbox Code Playgroud)
结果应该是:
['ace', 'ade', 'bce', 'bde']
Run Code Online (Sandbox Code Playgroud)
嵌套列表的长度不同。必须保持顺序——即第一个字母必须来自第一个列表,第二个字母必须来自第二个列表,依此类推。
这是我当前的递归解决方案:
def combine_letters(l)
if len(l) == 0:
return l[0]
temp = [x + y for x in l[0] for y in l[1]]
new = [temp] + l[2:]
return combine_letters(new)
Run Code Online (Sandbox Code Playgroud)
然而,我觉得应该有一种快速的、甚至是一行的方法来做到这一点,可以使用reduce 函数。有什么想法吗?
谢谢你!
编辑:这与链接的问题并不完全相似。首先,它适用于任意数量的子列表。其次,它返回字符串而不是元组。