首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python新手:用两个列表计算,其中一个是2d列表

Python新手:用两个列表计算,其中一个是2d列表
EN

Stack Overflow用户
提问于 2020-02-18 16:39:53
回答 1查看 52关注 0票数 0

首先我是个Python新手。我的任务是编写类似的代码,更容易变体的层次分析法(ahp)。我不允许带任何像numpy这样的包裹。

我需要一个列表输入n*就像:

代码语言:javascript
复制
liste = [[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]]

我已经意识到这一点:

代码语言:javascript
复制
liste = input("Put in the Matrix: ")

我要总结一下这些专栏:

代码语言:javascript
复制
 col_sums = [ sum(x) for x in zip(*liste) ]

现在它需要计算规范化列表,如下所示:

代码语言:javascript
复制
liste = [[1.0,2.0,3.0],
        [4.0,5.0,6.0],
        [7.0,8.0,9.0]]

list_norm = 1.0/col_sums[0] 2.0/col_sums[1] ...
            4.0/col_sums[0] 5.0/col_sums[1] ...
            7.0/col_sums[0] 8.0/col_sums[1] ...

实现这一目标的正确途径是什么?

谢谢你的反馈和关注。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-18 16:47:08

到目前为止,你做其他事情的方式看起来都是正确的。您只需要对list_norm进行另一个列表理解

代码语言:javascript
复制
liste = [[1.0,2.0,3.0],
        [4.0,5.0,6.0],
        [7.0,8.0,9.0]]
col_sums = [ sum(x) for x in zip(*liste) ]
list_norm = [[e / col_sums[c] for c, e in enumerate(row)] for row in liste]
# [[0.083, 0.133, 0.166], 
#  [0.333, 0.333, 0.333], 
#  [0.583, 0.533, 0.5]]

我们在这里使用enumerate()获取元素及其列表索引,并使用索引从col_sums获得适当的和。

正如@kaya3 3在评论中提到的,替代的、更干净的、解决方案:

代码语言:javascript
复制
list_norm = [[e / s for e, s in zip(row, col_sums)] for row in liste]

其中,zip()从它的两个参数中生成对应的元素对。在功能上,这是相同的代码片段,并产生相同的东西。

没有任何特别干净的方法可以将整个过程统一起来,但我认为不需要这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60285610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档