2012-11-16 168 views
2

值分配給成員,我有一個名單,讓說:在列表中的蟒蛇

test = [False, False, 2, False, False, False, 3, False, False] 

,我想這個名單爲False的每一個成員,除非這個成員等於2 所以分配結果應該是:

test = [False, False, 2, False, False, False, False, False, False] 

我想:

test = [False for i in test if i !=2] 

但結果卻是:

[False, False, False, False, False, False, False, False] 

,我試圖定義一個函數:

def set_False(lst): 
    for i in lst: 
     if i != 2: 
      i = False 
    return lst 

,當我申請:

test = set_False(test) 

結果是:

[False, False, 2, False, False, False, 3, False, False] 

我不能使用枚舉在我把我的代碼的環境,所以任何建議?

感謝

+3

爲什麼你不能用'enumerate'?這是一個核心的Python內置函數。 –

+0

,因爲我工作在有python 2.5的環境中,並且它給我錯誤,枚舉沒有定義。 – mazlor

+0

自從2.3版本開始'enumerate'已經在使用語言:http://docs.python.org/2.6/library/functions.html#enumerate –

回答

11

這是

[False if i !=2 else 2 for i in test] 

否則,你跳過整個元素時,它等於2

+0

[(我,假)[i!= 2]爲我在測試]也可以工作,但它是醜陋的; ) – Ivaldi

+2

@lvaldi:你爲什麼還要提到它呢? – SilentGhost

+0

因爲這是我想到的第一件事:P – Ivaldi

3

在你的情況在發生改變是可以做到這樣:

for i in range(len(lVals)): 
     if lVals[i] != 2: 
      lVals[i] = False 
+0

Artsiom,我不能使用枚舉。謝謝 – mazlor

+0

更新範圍(leb(listVals)) –

+0

非常好,謝謝Artsiom – mazlor

1

List comprehensions可能是實現您的目標最pythonic方式:

myList = [False, False, 2, False, False, False, 3, False, False] 
myFilteredList = [False if i !=2 else i for i in myList] 

如果你不想用這樣的語法,另外計算策略是使用mapping function

def myFilter(i): 
    return False if i!=2 else i 

myList = [False, False, 2, False, False, False, 3, False, False] 
myFilteredList = map(myFilter, myList)