2017-01-26 25 views
2

如何創建一個多維表,同時通過基於某些條件的一維列表進行迭代。如何在Python中創建多維列表?

我遍歷一維的列表,每當我發現一個「\ n」我應該追加這樣創建的列表與新的列表,例如,

a = [1,2,3,4,5,'\n',6,7,8,9,0,'\n',3,45,6,7,2] 

,所以我想這是因爲,

new_list = [[1,2,3,4],[6,7,8,9,0],[3,45,6,7,2]] 

我應該怎麼做?請幫忙

def storeData(k): 
    global dataList 
    dlist = [] 
    for y in k: 
     if y != '\n': 
      dlist.append(y) 
     else: 
      break 
    return dlist 

這就是我試過的。

+0

鑑於輸入是空列表。預期的結果是什麼? –

+0

你應該改變生成這個奇怪的輸入列表的任何代碼。後處理是錯誤的方式。 – user2357112

+0

@WillemVanOnsem我會假設一個空的列表,而是更好,如果OP說。 – Octo

回答

1

使用itertools.groupby會做工作(通過分組是一個換行符):

import itertools 

a = [1,2,3,4,5,'\n',6,7,8,9,0,'\n',3,45,6,7,2] 

new_list = [list(x) for k,x in itertools.groupby(a,key=lambda x : x!='\n') if k] 

print(new_list) 

我們比較關鍵的真值過濾掉的\n

結果出現:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
+0

您可以使用groupby中當前忽略的鍵值來消除第二遍。 – user2357112

+0

@ user2357112已修復。它好多了,你是對的! –

0

下面是基本方法:

編輯:天哪!傻的錯誤......這裏有一個修復:

>>> sub = [] 
>>> final = [] 
>>> for e in a: 
...  if e == '\n': 
...   final.append(sub) 
...   sub = [] 
...  else: 
...   sub.append(e) 
... else: 
...  final.append(sub) 
... 
>>> final 
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
>>> 

還有其他的方法,但這是幼稚的方式勢在必行。

+1

OP的質疑和期望的結果不太排隊上更多的用途ONELINE這一點。他們想要[[1,2,3,4],[6,7,8,9,0],[3,45,6,7,2]]不[[1,2,3,4,5] ,[6,7,8,9,0]]。如果您在沒有看到另一個'\ n'的情況下耗盡了項目,則需要一個條件將sub添加到final的末尾。 – Fruitspunchsamurai

+0

@Fruitspunchsamurai是的,是的。我的錯。 –

+0

爲什麼'else'中的'final.append(sub)'?而......「'順便說一句,這使得這個測試真的很麻煩...... –

0

這是我如何做到的,但必須有更好的解決方案。

x = 0 
output = [[]] 
for item in a: 
    if item != "\n": 
     output[x].append(item) 
    else: 
     x += 1 
     output.append([]) 

print(output) 
3

例如代碼:

lst = [[]] 
for x in a: 
    if x != '\n': 
     lst[-1].append(x) 
    else: 
     lst.append([]) 
print(lst) 

輸出:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]]