【发布时间】:2023-03-17 03:56:01
【问题描述】:
到目前为止,在 Python 中,我只见过指定一次包含一个元素的列表推导。例如,它们都是下面的形式
[f(x) for x in <iterable>]
有没有办法一次指定多个元素?例如,
[f(x), g(x) for x in <iterable>]
我问是因为我想创建一个列表推导来计算某个数字 x 的所有除数,但我想尽可能高效地做到这一点。现在我正在使用以下,
[y for y in range(1,x+1) if x%y == 0]
但我想做这样的事情,
[y, x/y for y in range(1, sqrt(x)+1) if x%y == 0]
因为这样会更有效率。顺便说一句,我没有这样做的实际理由。有人告诉我这只是一个具有挑战性的问题,目标是尽可能使用最小、最有效的列表理解来完成。
提前致谢。
编辑:好的,看来我必须使用元组。我试图避免这种情况,因为我必须创建另一个函数来展平列表,这会使我的解决方案更长。
编辑 2:以防万一有人偶然发现这个问题,我在原始问题中想要做的答案是这样的:
[y for x in <iterable> for y in f(x), g(x)]
它在列表推导中使用嵌套的 for 循环来完成工作。
【问题讨论】:
-
从你的问题和我面前的答案看来,你应该阅读嵌套列表理解。前段时间我问过a similar question,我认为这可能对你有帮助