2014-10-19 3 views
0

У меня есть список, скажем: list = [6,2,6,2,6,2,6], и я хочу, чтобы он создавал новый список со всеми остальными элемент умножается на 2 и каждый другой элемент, умноженный на 1 (остается неизменным). Результат должен быть: [12,2,12,2,12,2,12].python - умножить каждый другой элемент в списке

def multi(): 
    res = 0 
    for i in lst[0::2]: 
     return i * 2 

print(multi) 

Возможно, что-то вроде этого, но я не знаю, как двигаться дальше от этого. Как мое решение ошибочно?

ответ

4

Вы можете использовать назначение ломтика и список понимание:

l = oldlist[:] 
l[::2] = [x*2 for x in l[::2]] 

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

  1. функция не принимает никаких аргументов
  2. res, объявляется как число и а не список
  3. Ваша петля не имеет возможности знать индекс
  4. Вы возвращаетесь на первой итерации цикла
  5. не связанные с функцией, но вы на самом деле не называть multi

Вот ваш код, исправлено:

def multi(lst): 
    res = list(lst) # Copy the list 
    # Iterate through the indexes instead of the elements 
    for i in range(len(res)): 
     if i % 2 == 0: 
      res[i] = res[i]*2 
    return res 

print(multi([12,2,12,2,12,2,12])) 
2

Вы можете восстановить список со списком comprehenstion и enumerate функции, как эта функция

>>> [item * 2 if index % 2 == 0 else item for index, item in enumerate(lst)] 
[12, 2, 12, 2, 12, 2, 12] 

enumerate дает текущий индекс их элемент в итерации и текущий элемент, в каждой итерации. Затем мы используем условие

item * 2 if index % 2 == 0 else item 

, чтобы определить фактическое значение, которое будет использоваться. Здесь будет использоваться if index % 2 == 0, затем item * 2, иначе item будет использоваться как есть.

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