2009-11-24 73 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)