2012-10-10 115 views
1

如何在for循環中創建列表的列表?在For循環中列出列表

以下是我已經編寫現在:

a = 0 
    xy=[[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]]] 
    for liness in range(len(NNCatelogue)): 
     a=0 
     for iii in range(len(NNCatelogue[liness])): 

      while a < len(catid): 

       if catid[a]==NNCatelogue[liness][iii]: 

        xyiii = (catid[a], a) 
        xy.append(xyiii) 
       a += 1 

,我得到的是對的一長串,如預期的輸出。它看起來有點像下面這樣:

 [...,('C-18-1262', 30908), 
    ('C-18-1264', 30910), 
    ('C-18-1265', 30911), 
    ('C-18-1267', 30913), 
    ('C-18-1250', 30896), 
    ('C-18-1254', 30900),...] 

我想將這個對列表變成列表對的列表。有1268次迭代,每個列表的長度應該是12.(因此1268個列表中每個列表中包含12個元素)。在循環中如何處理這個問題的任何想法?

+0

'while'循環看起來有點無限......你沒有顯示你增加「a」的位置。 – nneonneo

+0

我編輯了代碼。對於那個很抱歉! – user1620716

+0

什麼是catid和NNCatelogue?名單?最好創建簡短的,自包含的,可運行的示例。 –

回答

4

也許是這樣的。請注意,我直接對列表使用迭代來節省大量不必要的索引。

xy = [] 
for line in NNCatelogue: 
    l = [] 
    for c in line: 
     for a, ca in enumerate(catid): 
      if ca == c: 
       l.append((ca, a)) 
    xy.append(l) 

如果您使用內循環只是以搜索類指標,我懷疑你是,一本字典可能是一個有益的補充,以避免內循環。

1

我有幾個建議,友好馬上蝙蝠:

所有的
  1. 首先,在最開始的A = 0是多餘的。在第一個for循環中,您使用a = 0兩次執行 相同的事情。

  2. 二,爲什麼你要聲明一個巨大的xy列表元素框架,在 頂部?隨着您沿着 行進,您總是可以追加()您需要的東西。

  3. 最後,while循環只是一個簡單的for循環:

    for n in range(len(catid)): 
    
0

您可以用列表擴展,像這樣一個列表的列表:

list_of_lists = [[j for j in range(0, 3)] for _ in range(0, 3)] 

,其輸出3x3列表:

[ [0, 1, 2], 
    [0, 1, 2], 
    [0, 1, 2] 
]