更改列表中的值:Python

时间:2015-12-05 19:16:30

标签: python list

我正在创建一个修改列表中元素的功能,但它并没有一直改变......我的功能是:

# DO NOT DO THIS
class salesapproval_sale_order(osv.Model):
_inherit = 'sale.order'
# code

# DO THIS
class salesapproval_sale_order(osv.Model):
    _inherit = 'sale.order'
    # code

何时

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

为什么它不会改变每个值?

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:0)

您的代码不正确,因为当您迭代列表时 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)

要改进您的代码,请将此用作if条件

 if l[x] == 1

答案 2 :(得分: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_lowercase

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