在将一个漂亮的简单循环转换为更pythonic的版本时,我引入了一个细微的(好吧,细心的情人在旁观者的眼中)。
数据结构是三个一维数组:
sums[10]
个浮点数indices[2]
in [0,10)中的整数;
即索引为sum [] how_much[2]
个浮点数原始代码:
for i in range(2):
sums[indices[i]] += how_much[i]
因此,如果sums
以全零开始,并且indices=[3,4]
和how_much=[.1,.2]
,那么我们将设置sums[3]=.1
和sums[4]=.2
。
Python版本:
sums[indices] += how_much
一切正常-indices[0] == indices[1]
处的特殊情况除外。因此,如果sums
再次以全零开始,则indices=[3,3]
和how_much=[.1, .2]
...
第一个循环设置sums[3]=.3
,而Pythonic的“等效”设置sums[3]=.2
。
我在文档中没有发现这种情况,但是我承认numpy运行合理。不幸的是,这种行为对我的应用程序是不正确的。
有人能想到一种不错的Python方式来实现循环吗? (当然,在现实生活中,数组要大得多,并且我多次执行循环。)