Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中从列表中删除所有字母项目_Python_Python 3.x_List - Fatal编程技术网

如何在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)
更可读吗?对我来说不是。但它是基于观点的。我只是说列表理解可以是一个迭代器。嘿,安,这个输入过滤器被卡住了