返回多个列表的 Python 列表推导式

阿瓦尼亚雷库瓦

我不知道在 Python 中是否可行,这就是我在这里问它的原因。

我有一个返回元组的 Python 函数:

def my_func(i):
    return i * 2, 'a' * i

这只是一个给定数字的愚蠢函数k,它k * 2按原样返回,另一个字符串是字母 'a' 的连接k次数。

我现在想形成两个列表,用 调用函数i = 0...9,我想创建一个包含所有第一个值的列表,另一个包含其余的值。

我用我目前的知识做的是:

选项 1:两次运行相同的列表理解,效率不高:

first_vals = [my_func(i)[0] for i in range(10)]
second_vals = [my_func(i)[1] for i in range(10)]

选项 2:避免列表推导式:

first_vals = []
second_vals = []
for i in range(10):
    f, s = my_func(i)
    first_vals.append(f)
    second_vals.append(s)

选项 3:使用列表理解来获取元组列表,然后使用另外两个列表理解来复制值。它比Option 1 好,因为这里my_func()每个只调用一次i

ret = [my_func(i) for i in range(10)]
first_vals = [r[0] for r in ret]
second_vals = [r[1] for r in ret]

是否有可能以某种方式使用列表理解功能,以便在一个命令和一次迭代中返回两个列表,并将每个返回的参数分配到不同的列表中?

出色地

选项 4:使用的逆zip

first_vals, second_vals = zip(*[my_func(i) for i in range(10)])

正如马克·迪金森在评论中指出,这将导致元组first_valssecond_vals如果您需要它们的类型list,例如,您可以应用map

first_vals, second_vals = map(list, zip(*[my_func(i) for i in range(10)]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章