如何在python中从列表中删除所有字母项目
这是我的代码:如何在python中从列表中删除所有字母项目,python,python-3.x,list,Python,Python 3.x,List,这是我的代码: filter_list=[1,2,'a','b'] import re ne=[] for i in filter_list: m=re.search(r"[a-zA-Z]",i) if m: ne.append(m.group()) print(ne) 预期产出: ne=[1,2] 但我得到了一个错误: TypeError:预期的字符串或类似object的字节在传递到regex之前将变量(整数)转换为字符串 m = re.
filter_list=[1,2,'a','b']
import re
ne=[]
for i in filter_list:
m=re.search(r"[a-zA-Z]",i)
if m:
ne.append(m.group())
print(ne)
预期产出:
ne=[1,2]
但我得到了一个错误:
TypeError:预期的字符串或类似object的字节
在传递到regex之前将变量(整数)转换为字符串
m = re.search(r"[a-zA-Z]", str(i))
鉴于你所拥有的,我相信你正试图做的是:
filter_list = [1,2,'a','b']
import re
ne = []
for i in filter_list:
m = re.search(r"[0-9]+",str(i))
if m:
ne.append(int(m.group()))
print(ne)
输出:
[1, 2]
[1, 2]
但我建议另一种选择:
filter_list = [1,2,'a','b']
ne = [i for i in filter_list if isinstance(i, int)]
print(ne)
输出:
[1, 2]
[1, 2]
这是因为
re.search
的第二个参数必须是字符串或类似字节的对象,在您的例子中,它是一个整数。也许你的清单应该是:
filter_list = ['1', '2', 'a', 'b']
请注意,如果要删除所有字母项目,还可以执行以下操作:
list(filter(lambda x: not x.isalpha(), filter_list)) # Return not alphabetic items ["1", "2"]
或
此外,如果您使用itertools,您可以:
import itertools
list(itertools.filterfalse(str.isalpha, filter_list))
在您的例子中,您在正则表达式中使用了int,这导致了错误 除此之外,正则表达式中更好的函数是 如果您想从列表中删除alpabethical项,并且该列表混合了多种类型,我会这样做
import re
def filter(lst):
return [re.sub(r"[a-zA-Z]", '', item) if(type(item) == str) else item for item in lst ]
您试图对int执行正则表达式搜索。这没有意义。列表中是否有非字母字符串,例如“123”?混合字符串“abc123”呢?它们应该被移除还是保留?在任何情况下,这个问题都不需要
re
@mani。你可以接受一个答案,它回答了你的问题。list(filter(lambda))
很难看。使用一个理解:[x代表过滤器中的x\u列表,如果不是x.isalpha()]
你通常会把它作为一个迭代器,在这种情况下,过滤器会很漂亮,因为我猜他以后会打印它,他想看到结果,我添加了列表(),这里是一个迭代器:(如果不是x.isalpha(),那么x代表filter\u list中的x)
@DYZ,你不认为itertools.filterfalse(str.isalpha,filter\u list)
更可读吗?对我来说不是。但它是基于观点的。我只是说列表理解可以是一个迭代器。嘿,安,这个输入过滤器被卡住了