2017-07-31 95 views
0

我想創建一個大型列表,用於輸入來自4個不同列表的值的數據庫。我希望它像如何將每個列表逐項合併成n個列表

[[list1[0], list2[0], list3[0], list4[0]], [list1[1], list2[1], list3[1], list4[1]], etc.....] 

的另一個問題是,目前的數據被接收這樣的:

[ [ [list1[0], list1[1], [list1[3]]], [[list2[0]]], etc.....] 

我試圖用指數法通過每個列表循環並將其添加到一個新的列表基於在那些但它沒有工作,我敢肯定,它沒有工作,因爲一些列表是不同的長度(他們並不意味着,但它是自動化的數據,所以有時會出現錯誤)。

任何人都知道什麼是最好的方式去做這件事?謝謝。

+0

創建一個列表,並用這方式太硬編碼的所有子列表 – AK47

回答

1

第一個列表可以用拉鍊的功能如下構成(對於4所列出):

list1 = [1,2,3,4] 
list2 = [5,6,7,8] 
list3 = [9,10,11,12] 
list4 = [13,14,15,16] 

res = list(zip(list1,list2,list3,list4)) 

對於存儲在另一個列表u可以使用* -notation解壓外名單列表的arbitrtary數:

lists = [...] 

res = list(zip(*lists)) 

構建名單列表從您荏苒在第二個問題用數據扁平化的概念,然後郵編:

def flatten(l): 
    res = [] 
    for el in l: 
     if(isinstance(el, list)): 
      res += flatten(el) 
     else: 
      res.append(el) 

    return res 

auto_data = [...] 

res = list(zip(*[flatten(el) for el in auto_data])) 

一些澄清底:

zip函數構建所有輸入之間的最小長度的結果,那麼你需要在最後的代碼串在列表解析數據延伸成一個長度不丟失一些信息。

0

如果壓扁概念不工作,嘗試了這一點:

import numpy as np 

myArray = np.array([[list1[0], list2[0], list3[0], list4[0]], [list1[1], list2[1], list3[1], list4[1]]]) 
np.hstack(myArray) 

也是一個應該工作:只爲那些誰將會爲搜索

np.concatenate(myArray, axis=1) 

當列表長度相同時解決此問題的方法:

def flatten(lists): 
    results = [] 
    for numbers in lists: 
     for output in numbers: 
      results.append(output) 
      return results 

print(flatten(n)) 
0

所以,如果我理解正確的話,這是你輸入:

l = [[1.1,1.2,1.3,1.4],[2.1,2.2,2.3,2.4],[3.1,3.2,3.3,3.4],[4.1,4.2,4.3,4.4]] 

,你會喜歡這個輸出

[[1.1,2.1,3.1,4.1],...] 

如果是這樣,這可以通過使用zip

完成
zip(*l) 
0

做一個for循環,只給你計數器變量。使用該變量來爲列表建立索引。創建一個臨時列表,用其他列表中的值填充它。將該列表添加到最後一個。有了這個,你會得到所需的結構。

nestedlist = [] 
for counter in range(0,x): 
    temporarylist = [] 
    temporarylist.append(firstlist[counter]) 
    temporarylist.append(secondlist[counter]) 
    temporarylist.append(thirdlist[counter]) 
    temporarylist.append(fourthlist[counter]) 
    nestedlist.append(temporarylist) 

如果所有4個列表長度相同,您可以使用此代碼使其更好。

nestedlist = [] 
for counter in range(0,len(firstlist)): #changed line 
    temporarylist = [] 
    temporarylist.append(firstlist[counter]) 
    temporarylist.append(secondlist[counter]) 
    temporarylist.append(thirdlist[counter]) 
    temporarylist.append(fourthlist[counter]) 
    nestedlist.append(temporarylist) 
+1

擴展它 – Netwave

0

這種理解應該工作,一點點的幫助zip

mylist = [i for i in zip(list1, list2, list3, list4)] 

但這是假設所有的單子都是相同的長度。如果不是這種情況(或者你不確定),你可以先「填充」它們,使其具有相同的長度。

def padlist(some_list, desired_length, pad_with): 
    while len(some_list) < desired_length: 
     some_list.append(pad_with) 
    return some_list 

list_of_lists = [list1, list2, list3, list4] 
maxlength = len(max(list_of_lists, key=len)) 
list_of_lists = [padlist(l, maxlength, 0) for l in list_of_lists] 

現在做上述理解的語句,效果很好,我的測試它

mylist = [i for i in zip(*list_of_lists)] 
相關問題