2014-01-24 99 views

回答

2

如果你只想刪除第一個元素,你可以做到這一點

A[A.index(1)] = None 

但是,如果你想更換所有1 S IN列表中,你可以,如果你想要做的就地更換使用此列表comprehenesion

A = [None if item == 1 else item for item in A] 

,你可以做這樣的(感謝@Jonas)

A[:] = [None if item == 1 else item for item in A] 

您可以編寫通用的功能,這樣

A, B = [None,None, None, None, None, None, 1, 1, 3, 4], [1, 1, 1] 

def replace(input_list, element, replacement): 
    try: 
     input_list[input_list.index(element)] = None 
    except ValueError, e: 
     pass 
    return input_list 

def replace_all(input_list, element, replacement): 
    input_list[:] = [replacement if item == element else item for item in input_list] 
    return input_list 

print replace(A, 1, None) 
print replace_all(B, 1, None) 

輸出

[None, None, None, None, None, None, None, 1, 3, 4] 
[None, None, None] 
+2

請注意,第二個陳述不適用於*,與第一個陳述(以及不適用於此問題的通常的「del」運算符)不同。爲了使第二個陳述*就位,你必須將左邊改爲「A [:]」(只是說出口,可能會引起混淆)。 –

+1

@JonasWielicki謝謝男人:)更新了我的答案。 – thefourtheye

+0

只有當列表** A **被另一個對象引用時,就地替換才值得額外的資源 – volcano

1

如果你只知道價值,這將取代第一發生:

A[A.index(1)] = None 

如果您知道該指數:

A[6] = None 
相關問題