相关疑难解决方法(0)

获取一系列列表的笛卡尔积?

如何从一组列表中获取笛卡尔积(每种可能的值组合)?

输入:

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)

python list cartesian-product

289
推荐指数
9
解决办法
18万
查看次数

用列表 B 的每个元素压缩列表 A 的每个元素 - 最好的“pythonie”方式

我有两个要压缩的列表

清单 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 方法是什么?

python python-2.7

1
推荐指数
1
解决办法
291
查看次数

以Python方式组合两个列表(因此 [['a', 'b'], ['c', 'd']] = ['ac', 'ad', 'bc', 'bd] )

给定一个列表列表,例如:

[['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 函数。有什么想法吗?

谢谢你!

编辑:这与链接的问题并不完全相似。首先,它适用于任意数量的子列表。其次,它返回字符串而不是元组。

python recursion python-2.7

0
推荐指数
1
解决办法
385
查看次数

标签 统计

python ×3

python-2.7 ×2

cartesian-product ×1

list ×1

recursion ×1