gpt4 book ai didi

python - 使用生成器构建矩阵

转载 作者:太空狗 更新时间:2023-10-30 02:02:29 24 4
gpt4 key购买 nike

我有一个列表:

l = [1,2,3]

我希望我的输出是:

m = [(1-1, 1-2, 1-3),(2-1, 2-2, 2-3), (3-1, 3-2, 3-3)]
m = [[0, -1, -2], [1,0,-1], [-2,-1,0]]

我写了这个函数,它运行良好:

def matrixer(l):
matrix = []

for data in l:
column = []
column.append(data - l[0])
column.append(data - l[1])
column.append(data - l[2])
matrix.append(column)

return matrix

但这并不能很好地扩展 - 因为我的列表可能有多达 100 个值,我不想继续为列表中的每个值添加下面的代码行:

column.append(data - l[n])

我以前从未使用过生成器,但听起来解决方案需要一个。我一直在尝试 while 循环,但当我遇到同样的问题时,它并没有让我到达那里。

最佳答案

使用两个 for 循环,我们每次都必须重置 sub_answer。这看起来很乱,所以也许是另一种选择;可以在下面找到:

l = [1,2,3]
answer = []
for each in l:
sub_answer = []
for every in l:
sub_answer.append(each-every)
answer.append(sub_answer)
sub_answer = []
print(answer)
#[[0, -1, -2], [1, 0, -1], [2, 1, 0]]

删除列表理解的 for 循环。现在我们不需要 sub_answer:

l = [1,2,3]
answer = []
for each in l:
answer.append([each-x for x in l])
print(answer)
#[[0, -1, -2], [1, 0, -1], [2, 1, 0]]

l 是可缩放的。我们正在遍历列表,然后附加到我们使用列表理解创建的新列表,我们通过再次遍历列表来减去 each 变量。

如果我们将 l 更改为 l = [1,2,3,4,5,6,7] 我们得到:

[[0, -1, -2, -3, -4, -5, -6], [1, 0, -1, -2, -3, -4, -5], [2, 1, 0, -1, -2, -3, -4], [3, 2, 1, 0, -1, -2, -3], [4, 3, 2, 1, 0, -1, -2], [5, 4, 3, 2, 1, 0, -1], [6, 5, 4, 3, 2, 1, 0]]

注意 (3-1 不是 -2...它是 2....)


我们用了一个列表理解为什么不用两个?!?!?!:如果您不想要 for 循环而只想使用列表理解:

l = [1,2,3]
print([[each-x for x in l] for each in l])
#[[0, -1, -2], [1, 0, -1], [2, 1, 0]]

给出相同的结果,但我认为如果您正在学习或在团队中,for 循环更具可读性。

关于python - 使用生成器构建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41049100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com