Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回多个列表的Python列表理解_Python_List Comprehension - Fatal编程技术网

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

返回多个列表的Python列表理解,python,list-comprehension,Python,List Comprehension,我不知道它在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

我不知道它在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:使用列表理解获取元组列表,然后使用其他两个列表理解复制值。它比选项1好,因为这里每个i只调用一次my_func:

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

选项4:使用zip的倒数:

正如评论中指出的,这将导致第一个变量和第二个变量的元组。例如,如果您需要它们为列表类型,您可以应用映射:

选项4:使用zip的倒数:

正如评论中指出的,这将导致第一个变量和第二个变量的元组。例如,如果您需要它们为列表类型,您可以应用映射:


逆zip函数?:lst1,lst2=zip*zipped_列表-从重复答案中,可能重复的-wich标记为ad dupe for。因此,搜索赢家…@PatrickArtner你建议的是一篇帖子,帮助那些已经知道zip是什么的人,并寻找一些非常具体的东西。你知道答案,因此找到了一篇文章也回答了这个问题,但我没有找到一篇有类似问题的文章谢谢你在评论中给出的答案,这是非常有用的一个反向压缩函数lst1,lst2=zip*zipped_列表-从重复答案中,可能重复的-wich标记为ad dupe for。因此,搜索赢家…@PatrickArtner你建议的是一篇帖子,帮助那些已经知道zip是什么的人,并寻找一些非常具体的东西。你已经知道答案,因此找到了一篇文章也回答了这个问题,但我没有找到一篇有类似问题的文章。无论如何,谢谢你在评论中给出的答案,这是非常重要的useful@PatrickArtner1.您没有定义压缩列表。2.如果你的评论应该是一个答案,你应该把它作为一个答案发布。请注意,这使得first\u vals和second\u vals成为元组而不是列表,这可能对OP来说不够好,也可能不够好。太好了,谢谢@AgvaniaRekuva不客气!如果有帮助的话,你可以把它当作正确的答案。“帕特里卡特纳,所以你认为这个问题不应该回答,这就是为什么你用评论来回答它的原因?”“我不明白这个道理。”“帕特里卡特纳1。您没有定义压缩列表。2.如果你的评论应该是一个答案,你应该把它作为一个答案发布。请注意,这使得first\u vals和second\u vals成为元组而不是列表,这可能对OP来说不够好,也可能不够好。太好了,谢谢@AgvaniaRekuva不客气!如果有帮助的话,你可以把它当作正确的答案。“帕特里卡特纳,所以你认为这个问题不应该回答,这就是为什么你用评论来回答它的原因?”我不明白这个道理。
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]
first_vals, second_vals = zip(*[my_func(i) for i in range(10)])
first_vals, second_vals = map(list, zip(*[my_func(i) for i in range(10)]))