2016-10-24 118 views
1
list1 = [1,2,3] 
def ex(example_list): 
    for number in example_list: 
     if(number == 2): 
       number = 3 

ex(list1) 
print(list1) 

我需要检查是否存在列表1内的2号,如果它的这里面,我想将它修改为3
但是,如果我运行的命令,number3,但list1仍将[1,2,3]而不是[1,3,3]检查,如果有一个列表内,如果真项修改

+2

如果什么有多个2的? – erip

回答

5

您可以使用enumerate()得到一些你需要更改索引:

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是具有自己的引用而不是对列表中项目的引用的对象。

2

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

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

现在如果列表不包含2index()会抛出异常,通常会终止您的程序。您可以捕获该错误,但是,什么事都不做:

list1 = [1,2,3] 
try: 
    i = list1.index(2) 
except ValueError: 
    pass 
else: # no error occurred 
    list1[i] = 2 
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) 
3

逻辑检查

list2 = [3 if num==2 else num for num in list1] 
012:和更换可在,因为你没有实际使用索引使用 三元运算符一个 列表理解共完成个

参考文献:

List comprehensions

Conditional expressions

1

l.index(n)将返回在该n可以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] 

如果您需要更换所有 2与3的,只是遍历,添加元素。如果元素不是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] 
相关问题