循环以递增顺序打印列表

时间:2016-02-02 15:59:05

标签: python

我试图通过循环嵌套列表来打印出这样的列表。

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

1 个答案:

答案 0 :(得分: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