python - 有没有一种干净的方法来对角连接数组?

标签 python

我想简化的数组的奇怪问题。

我有一系列列表,例如:

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/

相关文章:

python - 为什么我的 Apache 看不到我的媒体文件夹?

python - 如何高效地弹出heapq中具有最小键的所有元素?

python - 使用 Scikit-Learn 和 Python 将评论分为正面和负面

Python MySQL 连接器偶尔无法插入/更新

python - 在Python中使用多个正则表达式提取特定文本?

python - 自定义域路由到 Flask 服务器,自定义域始终显示在地址栏中

具有 utf-8 代码格式的 Python CSV 编写器

python - 如何使用 Python 将文件隐藏在图像中?

python - 如何在 scikit-learn 中创建/自定义自己的记分器功能?

python - 如何抓取多个网址中具有不同数据的网站