2009-11-24 91 views
2
[(',', 52), 
('news', 15), 
('.', 11), 
('bbc', 8), 
('and', 8), 
('the', 8), 
(':', 6), 
('music', 5), 
('-', 5), 
('blog', 4), 
('world', 4), 
('asia', 4), 
('international', 4), 
('on', 4), 
('itunes', 4), 
('online', 4), 
('digital', 3)] 

假設我有這個列表,裏面有元組。如何從列表中刪除某些內容,並添加字符串匹配?

我該如何瀏覽列表並刪除其中沒有字母字符的元素?

使其變成這樣:

[('news', 15), 
('bbc', 8), 
('and', 8), 
('the', 8), 
('music', 5), 
('blog', 4), 
('world', 4), 
('asia', 4), 
('international', 4), 
('on', 4), 
('itunes', 4), 
('online', 4), 
('digital', 3)] 
+0

澄清:(1)是否 「字母」 包括 「_」? (2)數字例如「K9」和「R2D2」以及「104.3FM」等詞語? (3)你的意思是保留的元素應該全部是按字母順序排列的,還是你的意思是它們必須至少有一個字母字符? – 2009-11-24 09:25:11

回答

10
the_list = [(a, b) for a, b in the_list if a.isalpha()] 
+0

''a。'。isalpha()' - > False,所以你的解決方案不正確。 '任何(c.isalpha()for c)'都會完成這項工作。或者你有更好的解決方案? – 2009-11-24 09:43:01

+0

我想給出的例子不會擴展到所問的問題。雖然問題本身聽起來毫不含糊,但我認爲考慮到OP正在處理的環境,很可能這個問題根本不能反映當前的任務。 – SilentGhost 2009-11-24 10:23:00

0

這使用string.ascii_letters,但SilentGhost's solution是首選。

>>> from string import ascii_letters 
>>> [(a, b) for a, b in l if all(c in ascii_letters for c in a)] 
[('news', 15), ('bbc', 8), ('and', 8), ('the', 8), ('music', 5), ('blog', 4), ('world', 4), ('asia', 4), ('international', 4), ('on', 4), ('itunes', 4), ('online', 4), ('digital', 3)] 
3

最容易的應該是一個列表理解用正則表達式:

import re 

lst = [...] 
lst = [t for t in lst if re.search(r'\w', t[0])] 
+1

正則表達式在這裏顯然是矯枉過正 – SilentGhost 2009-11-24 08:54:36

+3

更何況你的正則表達式是錯誤的 – SilentGhost 2009-11-24 08:55:31

+0

答案有什麼問題?它似乎工作:) – TIMEX 2009-11-24 09:21:16

0

你可以使用內置的過濾功能也一樣,它專注於這一目的其實。

filter(lambda x:x[0].isalpha(),LIST) 

的結果是這樣的

[('news', 15), 
('bbc', 8), 
('and', 8), 
('the', 8), 
('music', 5), 
('blog', 4), 
('world', 4), 
('asia', 4), 
('international', 4), 
('on', 4), 
('itunes', 4), 
('online', 4), 
('digital', 3)] 
+0

列表解析更pythonic。 – nikow 2009-11-24 09:00:09

+1

好吧,既然我知道已經有答案了,爲什麼我應該複製那些? – YOU 2009-11-24 09:03:41

+0

謝謝馬克!這有助於 – TIMEX 2009-11-24 09:20:44

1

@OP,只是經過列表項逐一檢查每個項目的第一要素。這只是我們簡單而基本的思考過程。不需要考慮是否pythonic太深,或使用奇怪的列表理解等。保持一切簡單。需要

l = [(',', 52), 
('news', 15), 
('.', 11), 
('bbc', 8), 
('and', 8), 
('the', 8), 
(':', 6), 
('music', 5), 
('-', 5), 
('blog', 4), 
('world', 4), 
('asia', 4), 
('international', 4), 
('on', 4), 
('itunes', 4), 
('online', 4), 
('digital', 3)] 

for item in l: 
    if item[0].isalpha(): 
     print item 

輸出

$ ./python.py 
('news', 15) 
('bbc', 8) 
('and', 8) 
('the', 8) 
('music', 5) 
('blog', 4) 
('world', 4) 
('asia', 4) 
('international', 4) 
('on', 4) 
('itunes', 4) 
('online', 4) 
('digital', 3) 
相關問題