2012-09-06 57 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