迭代两个列表以在Python中创建新列表

时间:2014-03-04 20:53:26

标签: python list

我正在尝试迭代两个列表以使用结果填充新列表,但我不确定它出错的地方。注意:我是使用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] 

4 个答案:

答案 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提供)应用于传入列表的每个元素,或者在这种情况下传入两个列表中的每对元素。