1

我有一个列表 Dsr

>>> Dsr
[59.10346189206572, 40.4211078871491, 37.22898098099725]
type(Dsr)
<type 'list'>

我需要计算最大值并将列表的每个元素除以该值

dmax = numpy.max(Dsr)
RPsr = []
for p in xrange(Dsr):
      RPsr.append(float(Dsr[p]/dmax))

我有以下问题:

1)当我运行这个循环时,我得到了错误信息:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: an integer is required

2)是否可以将循环转换为最优雅的列表理解?

4

3 回答 3

5

你得到了例外,因为xrange()需要 aint而不是list. 您需要使用len()

for p in xrange(len(Dsr)):
                ^^^

由于您已经在使用 NumPy,我的建议是像这样重写整个内容:

In [7]: Dsr = numpy.array([59.10346189206572, 40.4211078871491, 37.22898098099725])

In [8]: Dsr / Dsr.max()
Out[8]: array([ 1.        ,  0.68390423,  0.6298951 ])
于 2012-12-17T17:52:54.030 回答
3

如果我理解正确,你需要这个:

>>> dsr = [59.10346189206572, 40.4211078871491, 37.22898098099725]
>>> the_max = max(dsr)
>>> [i/the_max for i in dsr] 
[1.0, 0.6839042349323938, 0.6298950990211796]
于 2012-12-17T17:52:49.520 回答
1

大概您想遍历实际列表。你不xrange用于那个:

for p in Dsr:
    RPsr.append(float(p/dmax))

你说得对,列表理解是更简单的方法:

RPsr = [p/dmax for p in Dsr]
于 2012-12-17T17:54:26.673 回答