我想简化的数组的奇怪问题。
我有一系列列表,例如:
list1 = 'abc'
list2 = 'def'
...
listN = 'xyz'
我需要将它们压缩在一起,例如:
[['a', 0, 0, ..., 0],
['b', 0, 0, ..., 0],
['c', 0, 0, ..., 0],
[0, 'd', 0, ..., 0],
[0, 'e', 0, ..., 0],
[0, 'f', 0, ..., 0],
[...],
[0, 0, 0, ..., 'x'],
[0, 0, 0, ..., 'y'],
[0, 0, 0, ..., 'z']]
我有一个额外的限制,即 numpy
不是一个选项。
有没有一种简单的方法可以使用itertools
来做到这一点? (它不需要是一个列表,因为稍后可以像 for r in row: for c in column:
现在我正在这样做:
array1 = [[0 for i in range(n)] for j in range(m)]
step_i = 0
for i, a in enumerate([listA, listB, ..., listN]):
for b in a:
array1[step_i][I] = b
step_i += 1
但是实在是太丑了!
最佳答案
我认为让它看起来“不那么难看”的唯一方法就是用生成器替换临时数组并摆脱 step_i
。
这是我成功做到的:
def diag_zip(*lists):
for i, a in enumerate(lists):
for el in a:
row = [0 for _x in range(len(lists))]
row[i] = el
yield row
if __name__ == '__main__':
print(list(diag_zip('abc', 'def', 'ghi', 'xyz')))
它输出这个(由我格式化):
[['a', 0, 0, 0], ['b', 0, 0, 0], ['c', 0, 0, 0],
[0, 'd', 0, 0], [0, 'e', 0, 0], [0, 'f', 0, 0],
[0, 0, 'g', 0], [0, 0, 'h', 0], [0, 0, 'i', 0],
[0, 0, 0, 'x'], [0, 0, 0, 'y'], [0, 0, 0, 'z']]
关于python - 有没有一种干净的方法来对角连接数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006687/