gpt4 book ai didi

返回多个列表的 Python 列表理解

转载 作者:行者123 更新时间:2023-12-05 01:17:55 25 4
gpt4 key购买 nike

我不知道这在 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)])

作为Mark Dickinson在评论中指出,这将导致 first_valssecond_vals 的元组。例如,如果您需要它们是 list 类型,您可以应用 map:

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

关于返回多个列表的 Python 列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48241302/

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