Changing values in list: Python

你说的曾经没有我的故事 提交于 2019-11-28 02:16:51

问题


I'm making a function to modify the elements in a list, but it doesn't change all the way through... My function is:

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)

when

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

the output is:

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

Why doesn't it change every value?


回答1:


When you iterate through the loop, you are iterating the loop elements and not the indexes. You need to use enumerate to get the indexes along with the values.

A small demo can be

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)

Output

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



回答2:


Your code is incorrect, because when you iterate your list def modifyValues(l):

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 improve your code use this as your if condition

 if l[x] == 1



回答3:


You should dictionary instead to change item in the list.

>>> 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']
>>>

You can also use the ascii_lowercase constant from string

>>> 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']


来源:https://stackoverflow.com/questions/34109741/changing-values-in-list-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!