我正在尝试迭代两个列表以使用结果填充新列表,但我不确定它出错的地方。注意:我是使用Python的初学者。 Mahalo提前!
sumList = [27400.0, 32900.0, 42200.0, 40600.0];
volList = [27000.0, 40000.0, 31000.0, 40000.0];
rendeList = [];
x = 0;
for sumValue in range (0, len(sumList)-1):
rendeList = rendeList.append((sumList[x]/volList[x])*100)
x += 1;
但是,我得到一个属性错误:'NoneType'对象没有属性'append'。运行for循环后,我得到:
print rendeList
None
我的预期结果是:
print rendeList
[101.48, 82.25, 136.13, 101.49]
答案 0 :(得分:7)
list.append(x)
修改列表并返回None
。
将您的代码更改为:
for sumValue in range (0, len(sumList)):
rendeList.append((sumList[x]/volList[x])*100)
x += 1
或简化为:
for sumValue, volValue in zip(sumList, volList):
rendeList.append((sumValue / volValue) * 100)
答案 1 :(得分:4)
以下是使用列表理解的解决方案:
result = [a[0]/a[1]*100 for a in zip(sumList, volList)]
答案 2 :(得分:2)
问题的根源是list.append
返回None
>>> a_list = list('abc')
>>> print(a_list.append('d'))
None
>>> a_list
['a', 'b', 'c', 'd']
如果你重新分配a_list:
>>> a_list = a_list.append('e')
>>> a_list
>>> print(a_list)
None
答案 3 :(得分:2)
Python的map
函数非常适用于此:
rendeList = map(lambda x,y: x/y*100, sumList, volList)
map
函数返回一个列表,其中一个函数(第一个参数,在这里我作为Lambda expression提供)应用于传入列表的每个元素,或者在这种情况下传入两个列表中的每对元素。