我有一个清单,
list1 = [[1,4,0,0],[2,0,1,0],[9,8,4,0],[0,2,5,3]]
这个列表是这样的;
list1 =[[d[x][y] for y in key] for x in key]
所以当我用list1
写这个writer.writerows(list1)
时,它的excel表显示了这个:
1 4 0 0
2 0 1 0
9 8 4 0
0 2 5 3
如你所知,它不对称,我做了一个新的清单,
list2 = [[d[x][y]+d[y][x] for y in key] for x in key]
我本可以在excel文件中创建这个表:
2 6 9 0
6 0 9 2
9 9 8 5
0 2 5 6
但问题来了。我必须在x==y
中创建一个d[x][y]
的文件,然后不应计算其值。所以我希望我的结果是这样的:
1 6 9 0
6 0 9 2
9 9 4 5
0 2 5 3
仅供参考,我用过:
d = defaultdict(lambda:defaultdict(int))
keys = sorted(d)
我该如何处理这个问题?
答案 0 :(得分:1)
您可以使用双列表推导和三元运算符来选择何时添加元素:
list2 = [[list1[x][y] + list1[y][x] if x != y else list1[x][y]
for x in range(len(list1))] for y in range(len(list1[0]))]
list1 = [[1, 4, 0, 0], [2, 0, 1, 0], [9, 8, 4, 0], [0, 2, 5, 3]]
list2 = [[list1[x][y] + list1[y][x] if x != y else list1[x][y]
for x in range(len(list1))] for y in range(len(list1[0]))]
print(list2)
[[1, 6, 9, 0], [6, 0, 9, 2], [9, 9, 4, 5], [0, 2, 5, 3]]