2016-10-24 37 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] 
相關問題