2015-12-05 5 views
1

Я делаю функцию для изменения элементов в списке, но это не меняет весь путь через ... Мой функции:Изменение значений в списке: Python

def modifyValues(l): 
    for x in l: 
     if x == 1: 
      l[x] = 'a' 
     elif x == 2: 
      l[x] = 'b' 
     elif x == 3: 
      l[x] = 'c' 
    print (l) 

когда

modifyValues([1, 2, 3, 2, 3, 1, 2, 2]) 

выход:

['a', 'b', 'c', 2, 3, 1, 2, 2] 

Почему не это изменить все значения?

ответ

0

Когда вы повторяете цикл, вы повторяете элементы цикла, а не индексы. Чтобы получить индексы вместе со значениями, вам необходимо использовать enumerate.

Небольшой демо может быть

def modifyValues(l): 
    for i,x in enumerate(l): # Use enumerate here. 
     if x == 1: 
      l[i] = 'a' 
     elif x == 2: 
      l[i] = 'b' 
     elif x == 3: 
      l[i] = 'c' 
    print (l) 

Выход

['a', 'b', 'c', 'b', 'c', 'a', 'b', 'b'] 
0

Ваш код неверен, потому что, когда вы итерацию ваш список DEF modifyValues ​​(л):

for x in l: // the value of x will be the position of value 
     if x == 1:// your if condition does not check for the value in the list, it only checks the position. 
      l[x] = 'a' 
     elif x == 2: 
      l[x] = 'b' 
     elif x == 3: 
      l[x] = 'c' 
    print (l) 

To улучшите свой код, используйте это как ваше условие if

if l[x] == 1 
0

Вместо этого вы должны использовать словарь для изменения элемента в списке.

>>> def modifyValues(l): 
...  d = {'a': 1, 'b': 2, 'c': 3} 
...  modifyl = [k for i in l for k in d if d[k] == i] 
...  print(modifyl) 
... 
>>> modifyValues([1, 2, 3, 2, 3, 1, 2, 2]) 
['a', 'b', 'c', 'b', 'c', 'a', 'b', 'b'] 
>>> 

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

>>> from string import ascii_lowercase 
>>> def modifyValues(l): 
...  modifyl = [v for i in l for k, v in enumerate(ascii_lowercase, 1) if i == k] 
...  print(modifyl) 
... 
>>> modifyValues([1, 2, 3, 2, 3, 1, 2, 2]) 
['a', 'b', 'c', 'b', 'c', 'a', 'b', 'b'] 
Смежные вопросы