Python 当与过滤器一起使用时,正则表达式sub不工作

Python 当与过滤器一起使用时,正则表达式sub不工作,python,regex,filter,Python,Regex,Filter,我有一个包含特殊字符的字符串列表 state_list=[('Andhra Pradesh',),('Karnataka',)] 像这样很好用 for state in state_list: print(re.sub(r'\W+'," ",str(state))) 输出 安得拉邦 卡纳塔克邦 当我使用过滤器来做这件事时 list(filter(lambda state: re.sub(r"\W+", " ", str(sta

我有一个包含特殊字符的字符串列表

state_list=[('Andhra Pradesh',),('Karnataka',)]

像这样很好用

for state in state_list:
    print(re.sub(r'\W+'," ",str(state)))
输出

安得拉邦

卡纳塔克邦

当我使用过滤器来做这件事时

list(filter(lambda state: re.sub(r"\W+", " ", str(state)),state_list))
它不起作用! 我把名单原封不动地拿回来了

[('Andhra Pradesh',),('Karnataka',)]

我期待着这样的清单
['Andhra Pradesh','Karnataka']

我希望从字符串列表中删除像
这样的特殊字符。sub()不执行重叠替换。您需要自己的循环,这就是为什么它在第一种情况下使用for循环有效

清单理解将是实现这一目标的理想方式:

[state[0] for state in state_list]
输出:

['Andhra Pradesh', 'Karnataka']

也许你想要
地图
<代码>列表(map(lambda state:re.sub(r“\W+”,“”,state[0]),state\u list))?
map
没有帮助,列表中每个项目的数据类型都是
class'sqlalchemy.util.\u collections.result'
所以需要先将其转换为
str
才能使用
re
,但您显示了一个元组列表。请尝试
tuple(state)[0]
list(map(lambda state:re.sub(r“\W+”,“”,str(tuple(state)[0])),state\u list))
unique\u state\u list=partnerTableSession.query(partnerTable.c.state).distinct()。all()
为我提供了一个类似
[('Andhra Pradesh',),('Karnataka',)]
当屏幕上打印
唯一状态列表时<列表中每个元素的代码>数据类型是
类'sqlalchemy.util.\u collections.result'
重点是分别获取项目。然后将其大小写为
str