如何从列表中删除某些内容,并添加字符串匹配?
[(',', 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)]
the_list = [(a, b) for a, b in the_list if a.isalpha()]
''a。'。isalpha()' - > False,所以你的解决方案不正确。 '任何(c.isalpha()for c)'都会完成这项工作。或者你有更好的解决方案? – 2009-11-24 09:43:01
我想给出的例子不会扩展到所问的问题。虽然问题本身听起来毫不含糊,但我认为考虑到OP正在处理的环境,很可能这个问题根本不能反映当前的任务。 – SilentGhost 2009-11-24 10:23:00
这使用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)]
最容易的应该是一个列表理解用正则表达式:
import re
lst = [...]
lst = [t for t in lst if re.search(r'\w', t[0])]
正则表达式在这里显然是矫枉过正 – SilentGhost 2009-11-24 08:54:36
更何况你的正则表达式是错误的 – SilentGhost 2009-11-24 08:55:31
答案有什么问题?它似乎工作:) – TIMEX 2009-11-24 09:21:16
你可以使用内置的过滤功能也一样,它专注于这一目的其实。
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)]
@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)
澄清:(1)是否 “字母” 包括 “_”? (2)数字例如“K9”和“R2D2”以及“104.3FM”等词语? (3)你的意思是保留的元素应该全部是按字母顺序排列的,还是你的意思是它们必须至少有一个字母字符? – 2009-11-24 09:25:11