2016-10-28 31 views
-4
l = [1,2,3,4,5,'1','2','3','4','nag','nag','venkat',5,6,7] 
l1 = [] 
for i in l: 
    if (str(i) not in l1) and (i not in l1): 
     l1.append(i) 
print l1 

我想清理我的列表。我的列表包含數字和字符串。在上面的列表中,我有1和「1」。我想刪除1或「1」。我想輸出爲[1, 2, 3, 4, 5, "nag", "venkat", 6, 7]我想清理列表中的元素。如果我的列表包含數字1 ansSixng「1」我想保留只有一個元素或者整數或刺

+1

你有什麼問題? – Humbalan

+1

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[MCVE]。 –

回答

0

在IDLE中證實,它提供了您正在尋找的輸出。另外,我更新了一些變量的名稱,使其更容易理解。

my_list = [1,2,3,4,5,'1','2','3','4','nag','nag','venkat',5,6,7] 
output_list = [] 
for i in my_list: 
    try: 
     if (str(i) not in output_list) and (int(i) not in output_list): 
      output_list.append(i) 
    except ValueError: 
     if i not in output_list: 
      output_list.append(i) 
print output_list 

在Python它的使用變量假設他們是某種類型的,只是趕上,而不是通過檢查每一筆的類型(intstr等)的過程中去的錯誤,常見的做法。這裏,在try聲明中,我假設循環變量iint或僅包含數字的str。如果是這樣,這部分工作正常。

但是,我們知道該列表包含一些字母串,因此try塊將拋出ValueErrorexcept模塊捕獲並知道這個錯誤是由於試圖將一串字母作爲int(當我們使用int(i)時)導致的,現在我們可以安全地假設循環變量i引用了一串字母,它然後我們檢查output_list並在需要時追加。我希望有所幫助。

+0

嗨,非常感謝。我想要的代碼完全是你給的。 –

+0

你能告訴我我錯了嗎?爲什麼我的代碼沒有得到我需要的東西? –

+0

是的。你的代碼沒有檢查包含數字的字符串,例如「1」或「4」。這意味着它不斷包含那些你不想要的字符串。我所做的更改確保它檢查這些字符串並按照您的要求處理它們。如果您發現我的答案有幫助,請考慮將其標記爲已接受的答案。 – coralvanda

0

有與列表理解的方式,創建一個新的列表,但這個例子只是工作,如果你知道你想要刪除的內容:

l1 = [i for i in l if i != "1" if i != "2" if i != "3" if i != "4"] 

#output 
[1, 2, 3, 4, 5, 'nag', 'nag', 'venkat', 5, 6, 7] 

,或者例如僅去除串「1」,它會是

l1 = [i for i in l if i != "1"] 

也許它可以在一個函數和循環中實現,以這種方式用單個if語句去除這些元素。不知道,無論如何,我會用coralv的方式去。

相關問題