2014-03-04 3 views
1

Я пытаюсь выполнить итерацию по двум спискам, чтобы заполнить новый список результатом, но не знаю, где это происходит. Примечание. Я начинаю использовать Python. Махало заранее!Итерирование над двумя списками для создания нового списка в Python

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» не имеет атрибута «Добавить». После запуска для цикла, я получаю:

print rendeList 
None 

Мой ожидаемый результат был бы:

print rendeList 
[101.48, 82.25, 136.13, 101.49] 
+3

, определяющий возвращаемое значение append - ошибка. Он прилагается к месту. И return 'none' – M4rtini

+0

Не имеет отношения к вашему конкретному вопросу, но вам может быть интересно узнать, что вы можете сделать только' for sumValue в sumList'. Кроме того, вы можете найти функцию «enumerate» полезной. вы можете сделать 'для x, sumValue в перечислении (sumList)' – CoupleWavyLines

+0

@CoupleWavyLines: зачем останавливаться на 'перечислении', когда есть' zip'? – njzk2

ответ

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) 
+0

Учитывая ожидаемый результат в вопросе, я думаю, что '-1' в 'len (sumList) -1' в вопросе и этот ответ являются ошибкой. – CoupleWavyLines

+0

Похоже, вы правы. Редактирование сейчас. – tmr232

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 
4

Вот ваше решение, используя список понимание:

result = [a[0]/a[1]*100 for a in zip(sumList, volList)] 
+0

'result = [s/v * 100 для s, v в zip (sumList, volList)]' –

2

map функция языка Python был бы идеальным для этого:

rendeList = map(lambda x,y: x/y*100, sumList, volList) 

map функция возвращает список, в котором функция (первый аргумент, который здесь я 've, поставленный как Lambda expression), применяется к каждому элементу прошедшего списка, или в этом случае каждая пара элементов из двух списков передается.

Смежные вопросы