在将一个很好的简单循环转换成一个更具python风格的版本时,我引入了一个微妙的bug(好吧,好吧,微妙在旁观者的眼中)。你知道吗
数据结构是三个一维数组:
sums[10]
浮点数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
。你知道吗
Pythonic版本:
sums[indices] += how_much
一切都好——除了indices[0] == indices[1]
时的转角情况。所以如果sums
再次开始全零,indices=[3,3]
和how_much=[.1, .2]
。。。然后
第一个循环设置sums[3]=.3
,而Pythonic“等价”设置sums[3]=.2
。你知道吗
我没有在文档中发现这个案例,但是我承认numpy的运行是合理的。不幸的是,这种行为对我的应用程序是不正确的。你知道吗
有人能想出一个好的Pythonic方法来实现循环吗?(当然,在现实生活中,数组要大得多,我多次执行循环)。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐