2016-02-02 91 views
2

我想通過循環嵌套列表來打印出像這樣的列表。循環以升序打印出列表

1: 1 1 
2: 1 2, 2 1 
3: 1 3, 2 2, 3 1 
4: 1 4, 2 3, 3 2, 4 1 
5: 2 4, 3 3, 4 2 

等..

這裏是我的嘗試吧: 我已經循環儘管每個列表,並能打印出清單。我不知道如何循序漸進的下一個列表,直到它結束。

val = [[1, [1,2,3,4]], [2, [1,2,3,4]], [3, [1,2,3,4]], [4, [1,2,3,4]]] 
k = 0 
for i in range(0,4): 
    k += 1 
    for j in range (0,4): 
     print(k,":", val[i][0],val[i][1][j]) 
     k+= 1 



1 : 1 1 
2 : 1 2 
3 : 1 3 
4 : 1 4 
6 : 2 1 
7 : 2 2 
8 : 2 3 
9 : 2 4 
11 : 3 1 
12 : 3 2 
13 : 3 3 
14 : 3 4 
16 : 4 1 
17 : 4 2 
18 : 4 3 
19 : 4 4 

回答

2

您是在正確的道路上,除了而不是打印您在第一組的for循環將它們存儲在列表字典作爲值和兩個值作爲關鍵的和所得到的值。由於原始列表的順序,我不需要對字典中的列表進行排序。

後來在打印時,您會將這些值連接在一起,這就是爲什麼我在將它們添加到列表中之前對它們進行了格式化。該格式將爲每行添加一個額外的逗號,這就是爲什麼我將[:-1]添加到聯接中以將其刪除的原因。

from collections import defaultdict 

val = [[1, [1,2,3,4]], [2, [1,2,3,4]], [3, [1,2,3,4]], [4, [1,2,3,4]]] 
d = defaultdict(list) 
for i in range(0,4): 
    for j in range (0,4): 
     d[val[i][0]+val[i][1][j]].append('{} {},'.format(val[i][0],val[i][1][j])) 

for x,i in enumerate(d): 
    #If it needs to be sorted just add sorted(d[i]) in place of d[i] 
    s = ' '.join(d[i])[:-1]   
    print('{}: {}'.format(x+1, s)) 

1: 1 1 
2: 1 2, 2 1 
3: 1 3, 2 2, 3 1 
4: 1 4, 2 3, 3 2, 4 1 
5: 2 4, 3 3, 4 2 
6: 3 4, 4 3 
7: 4 4 
+0

謝謝您的回答。有沒有辦法遞歸地做到這一點?這是一個更大的項目的一部分,它使用tkinter從畫布上的列表更新座標。 @SirParselot – Abhi

+0

@Abhi我想不出有辦法做到這一點,但我並不擅長遞歸函數。爲什麼它是遞歸的呢? – SirParselot

+0

我必須使用列表中的值來不斷更新/添加畫布上的座標。它不一定是遞歸的,但使用不同的方法將有助於更新座標。 – Abhi