2012-09-06 59 views
1

这可能是一个初学者的问题,但我不知道如何寻找一个答案(因为我不能“名”的问题)转换列表到“换位”列表

我有2名列表或元组2所列出

xxx = ["time1", "time2", "time3"] 
yyy = ["value1", "value2", "value3"] 
zzz=(xxx,yyy) 

现在我想创建每个条目 结果列表/元组应该是

[['time1', 'value1'], ['time2', 'value2'], ['time3', 'value3']] 

我可以用一个for循环(和zip)要做到这一点,但那里o“更好的”解决方案? 这里是一个similar question但我不能用我的probelms

+3

“我可以用一个for循环(和zip)要做到这一点,但有没有‘更好’的解决方案?” - 有关'zip'的什么“不好”? –

+0

如何将zip的结果转换为新列表? 因为拉链返回“迭代的对象” – nobs

+0

@nobs - 我现在我看你已经更新了正在使用Python 3 – mgilson

回答

11

使用内置zip函数给出有分辨率:

zzz = zip(xxx, yyy) 

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

#list (python2.x) or iterable(python3.x) of lists 
zzz = map(list,zip(xxx,yyy)) 

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

如果您使用python3.x并且要确保zzz是一个列表,该列表comprehsion解决方案将工作或者你可以从迭代是zip产生构建一个列表:

#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 
+0

感谢您的快速回答 它应该在Python 2.7和3.x工作,所以我有使用“通用”的做法 – nobs

+1

'名单(拉链(...))'符合该法案,假设你不介意2.7不必要的副本。 –

+2

@nobs - 一个以上的解决方案应该为你工作。如果你想列出的清单,而不是一个元组列表,该列表理解可能是你最好的选择。如果元组列表正确,那么'list(zip(...))'在两种情况下都可以工作。 – mgilson

0

我注意到,你的数据包括时间标记和编号。如果你正在进行数量密集型计算,那么numpy数组可能值得一看。它们提供更好的性能,并且转置非常简单。 (arrayname.transpose()甚至arrayname.T

+0

你是对的,但这是我从一个c-dll电话 得到的回应,我必须改变一些更“可管理”的数据 也是其唯一的一些测试功能,所以速度是目前没有主题(但我使用python来测试CDLL的速度:-)) – nobs