gpt4 book ai didi

python - 在 itertools.product 中使用 lambda 以获得更好的代码

转载 作者:行者123 更新时间:2023-11-28 21:14:09 25 4
gpt4 key购买 nike

为了帮助我更好地理解和编写更紧凑的代码,我怀疑可以使用 lambda 将以下代码写在一行中,连接两个 perms = 赋值。有 Python 大师吗?

import itertools

l = [["a", "b"], ["c", "d", "e"]]
perms = list(itertools.product(*l))
perms = sorted([",".join(x) for x in perms])
print perms

我怀疑可以在同一个 lambda 中完成的次要如果 l 是整数列表的列表,因为以下完全失败怎么办?

import itertools

l = [[1, 2], [3, 4, 5]]
perms = list(itertools.product(*l))
perms = sorted([",".join(x) for x in perms])
print perms

最佳答案

您不需要任何 lambda。直接遍历 itertools.product() 生成器,无需先将其转换为列表:

perms = sorted([",".join(x) for x in itertools.product(*l)])

[..] 括号可以省略,因为 sorted() 会将生成器表达式转换为列表无论如何,但生成列表对象稍微快一些。

请注意,您的 product() 输出已经按照您提供的特定输入排序,因此 sorted() 在这里是多余的。

演示:

>>> from itertools import product
>>> l = [["a", "b"], ["c", "d", "e"]]
>>> sorted([",".join(x) for x in product(*l)])
['a,c', 'a,d', 'a,e', 'b,c', 'b,d', 'b,e']
>>> [",".join(x) for x in product(*l)]
['a,c', 'a,d', 'a,e', 'b,c', 'b,d', 'b,e']

您的第二次尝试失败了,因为您需要先将整数映射到字符串,然后才能对这些整数使用 str.join():

l = [[1, 2], [3, 4, 5]]
perms = sorted([",".join(map(str, x)) for x in itertools.product(*l)])

或者更好的是,将输入转换为字符串仅一次:

perms = sorted([",".join(x) for x in itertools.product(*(map(str, li) for li in l))])

关于python - 在 itertools.product 中使用 lambda 以获得更好的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32018513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com