检查列表中是否有项目,如果True则修改它

时间:2016-10-24 19:57:12

标签: python

list1 = [1,2,3]
def ex(example_list):
     for number in example_list:
         if(number == 2):
              number = 3

ex(list1)
print(list1)

我需要检查list1中是否有数字2,如果它在里面,我想将其修改为3。 但是如果我运行命令,number将是3,但list1将保持[1,2,3]而不是[1,3,3]

5 个答案:

答案 0 :(得分:5)

您可以使用list1 = [1,2,3] def ex(example_list): for idx, number in enumerate(example_list): if(number == 2): example_list[idx] = 3 ex(list1) print(list1) 获取需要更改的数字的索引:

number

变量{{1}}是一个具有自己引用的对象,而不是对列表中项目的引用。

答案 1 :(得分:3)

检查和替换的逻辑可以使用三元运算符列表解析中完全完成,因为您实际上并未使用索引:

list2 = [3 if num==2 else num for num in list1]

参考文献:

List comprehensions

Conditional expressions

答案 2 :(得分:2)

为了修改列表项,您需要知道它所在的插槽。列表的.index()方法可以告诉您。

list1 = [1,2,3]
i = list1.index(2)
list1[i] = 2

如果列表中不包含2,会发生什么? index()将抛出异常,通常会终止您的程序。但是,您可以捕获该错误,并且不执行任何操作:

list1 = [1,2,3]
try:
    i = list1.index(2)
except ValueError:
    pass
else:    # no error occurred
   list1[i] = 2

答案 3 :(得分:2)

所以...你遇到的问题是,由于number包含基本类型(int),修改number不会修改列表中的引用。基本上,您需要使用要更改的项目的index来更改列表中的项目:

list1 = [1,2,3]
def ex(example_list):
     for i, number in enumerate(example_list):
         if(number == 2):
              example_list[i] = 3  # <-- This is the important part

ex(list1)
print(list1)

仅使用索引(可能更清楚):

list1 = [1,2,3]
def ex(example_list):
     for i in range(len(example_list)):
         if(example_list[i] == 2):
              example_list[i] = 3

ex(list1)
print(list1)

答案 4 :(得分:1)

l.index(n)将返回在n l中可以找到list的索引,如果它不在那里则会抛出一个ValueError。

如果您想用某些内容替换n的第一个实例,这非常有用,如下所示:

>>> l = [1,2,3,4]
>>> # Don't get to try in case this fails!
>>> l[l.index(2)] = 3 
>>> l
[1, 3, 3, 4]

如果你需要用3&#39替换所有 2,只需迭代,添加元素即可。如果元素不是2,那就没问题了。否则,请将其设为3。

l = [e if e != 2 else 3 for e in l]

用法:

>>> l = [1,2,3,4]
>>> l = [e if e != 2 else 3 for e in l]
>>> l
[1, 3, 3, 4]