将列表转换为"转置"列表

nob*_*obs 1 python

这可能是一个初学者的问题,但我不知道如何搜索答案(因为我不能"命名"这个问题)

我有2个列表或2个列表的元组

xxx = ["time1", "time2", "time3"]
yyy = ["value1", "value2", "value3"]
zzz=(xxx,yyy)
Run Code Online (Sandbox Code Playgroud)

现在我想为每个输入结果创建一个列表/元组

[['time1', 'value1'], ['time2', 'value2'], ['time3', 'value3']]
Run Code Online (Sandbox Code Playgroud)

我能用for循环(和zip)做到这一点但是没有"更好"的解决方案吗?这是一个类似的问题,但我无法使用那里的解决方案来解决我的问题

mgi*_*son 11

使用内置zip函数:

 zzz = zip(xxx, yyy) 
Run Code Online (Sandbox Code Playgroud)

当然,这会创建一个元组列表(或python3.x中可迭代的元组).如果你真的想要一个列表列表:

 #list (python2.x) or iterable(python3.x) of lists
 zzz = map(list,zip(xxx,yyy)) 
Run Code Online (Sandbox Code Playgroud)

要么

 #list of lists, not list of tuples
 #python 2.x and python 3.x
 zzz = [ list(x) for x in zip(xxx,yyy) ]
Run Code Online (Sandbox Code Playgroud)

如果您正在使用python3.x并且您想确保它zzz是一个列表,那么列表comprehsion解决方案将起作用,或者您可以从zip生成的iterable构造一个列表:

#list of tuples in python3.x.  
zzz = list(zip(xxx,yyy)) #equivalent to zip(xxx,yyy) in python2.x
                         #will work in python2.x, but will make an extra copy.
                         # which will be available for garbage collection
                         # immediately
Run Code Online (Sandbox Code Playgroud)

  • @nobs - 上述解决方案之一应该适合您.如果你想要一个列表而不是一个元组列表,列表理解可能是你最好的选择.如果元组列表没有问题,那么`list(zip(...))`将适用于这两种情况. (2认同)