我有 10 笔涉及属性(property)份额和规模的交易。我想要每一个的总和。有没有办法在一个循环而不是 2 个循环中完成它?
我现在是如何实现的:
total_shares = sum((t.shares for t in transactions))
total_size = sum((t.size for t in transactions))
没有。 sum
函数一次只能找到一个可迭代对象的总和。因此,您要么需要像这样更改代码
total_shares, total_size = 0, 0
for t in transactions:
total_shares, total_size = total_shares + t.shares, total_size + t.size
或者对您已经在问题中显示的代码感到满意。这是完美的,没有任何错误。
如果你真的喜欢把你的代码复杂化,你可以把它改成这样
t_shares, t_size = map(sum, zip(*((t.shares, t.size) for t in transactions))))
这个 get 首先用 shares
生成元组和 sizes
然后 zip
会将元组转换为两个元组 shares
和 sizes
最后 sum
将应用于将在 t_shares
上解包的每个元组和 t_size
.
注意: map
, sum
和 zip
实际上,变体在内部运行的循环比您在问题中显示的明确的两个循环要多。
我是一名优秀的程序员,十分优秀!