这个循环有正确的Pythonic版本吗?

2024-04-30 04:15:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在将一个很好的简单循环转换成一个更具python风格的版本时,我引入了一个微妙的bug(好吧,好吧,微妙在旁观者的眼中)。你知道吗

数据结构是三个一维数组:

  • sums[10]浮点数
  • ^[0,10]中整数的{}; i、 例如,索引到总和[]
  • how_much[2]浮点数

原始代码:

for i in range(2):  
    sums[indices[i]] += how_much[i]

所以如果sums开始全零,并且indices=[3,4]how_much=[.1,.2],那么我们将设置sums[3]=.1sums[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方法来实现循环吗?(当然,在现实生活中,数组要大得多,我多次执行循环)。你知道吗


Tags: 代码版本数据结构风格整数数组pythonicbug