Python:使用列表理解生成对称数组

标签 python arrays list-comprehension

我正在尝试生成矩阵 A == [f(i,j) for i,j in range(0,n)] .矩阵是对称的 (f(i,j) == f(j,i))并且对角线元素为零 (f(i,i) == 0) .

问题:是否有可能产生一个列表理解来生成这个矩阵,但只调用函数 f(i,j)对于 i < j

不是我的问题:以其他方式生成对称矩阵。


可能的解决方案:调用f通过辅助功能 g保存 f 的值在额外的存储中或返回存储的值。

是否可以解决避免额外存储的问题? 我不确定这个额外的障碍是否意味着有必要引用列表理解本身(我读到的在 Python 中不存在),希望我错过了一些其他技巧。

最佳答案

假设您确实需要完整的矩阵,尽管它是对称的,您可以这样做。

首先创建矩阵A。 (我知道,这意味着您不是在列表理解中生成它。)这里我定义了一个“虚拟”函数 f 并假设 n 的值为 3。

>>> n=3
>>> subs=((i,j) for i in range(n) for j in range(3) if i<=j)
>>> for i,j in subs:
...     i,j
...     
(0, 0)
(0, 1)
(0, 2)
(1, 1)
(1, 2)
(2, 2)
>>> def f(i,j):
...     return
... 
>>> def g(i,j):
...     if i==j:
...         A[i,i] = 0
...     else:
...         val=f(i,j)
...         A[i,j]=val
...         A[j,i]=val

如果我没听错的话,不需要额外的存储空间。在练习 subs 的列表理解中调用 g

关于Python:使用列表理解生成对称数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203496/

相关文章:

python - Django 模板是否允许在 for 循环中使用 range()?

python - 在不导入/运行的情况下查看另一个 Python 文件的变量

Python:使用 lambda 从列表中使用列表理解创建字典

julia - 如何使用列表理解创建二维数组?

python - 列表理解按列组合子列表的元素

python - 尽快将 ctypes 数据转换为 python 字符串

java - 为什么可以将 int[] 转换为 Object,而不是 Object[]?

php - 引用 - 这个错误在 PHP 中意味着什么?

c++ - 用 %20 替换空格

python - 我的 while 循环不工作