如何在Python中对列表应用正则表达式时对其进行迭代?

如何在Python中对列表应用正则表达式时对其进行迭代?,python,python-3.x,regex,loops,for-loop,Python,Python 3.x,Regex,Loops,For Loop,我正在尝试运行这段代码 castResultType = list(filterResultSet[1:32:5]) cleanList = [] for i in castResultType: cleanList.append(re.sub('[^\d\.]', '',castResultType[i])) print(cleanList) 我希望从列表castResultType中获取基本上每个项目,它从插入空列表cleanList的列表filterResultSet中获取

我正在尝试运行这段代码

castResultType = list(filterResultSet[1:32:5]) 
cleanList = []

for i in castResultType:
    cleanList.append(re.sub('[^\d\.]', '',castResultType[i]))

print(cleanList)
我希望从列表
castResultType
中获取基本上每个项目,它从插入空列表
cleanList
的列表
filterResultSet
中获取特定值。同时将上述正则表达式应用于
castResultType
中插入
cleanList
之前的每个值。我肯定我做错了什么,如果能得到任何帮助,我将不胜感激。一般来说,我对python和编程也很陌生,因此如果我问了一些愚蠢的问题,我很抱歉。

您(可能)面临的问题是这一行:
对于castResultType中的我来说

这一行所做的是在我们的
(列表)castResultType
中的值上循环,并将其元素分配给
i
。但是,当您调用
castResultType[i]
时,您要求的是一个不存在的列表索引

你可能想做的是:

范围内i的
(len(castResultType)):
cleanList.append(re.sub('[^\d\.]','',castResultType[i]))
#等
您还可以做的是:

CasterSultType中的i的
:
cleanList.append(re.sub('[^\d\.]','',i))
#等
有很多其他的方法来编码你想要做的事情,但是对于初学者来说,这些可能是最熟悉的

除了循环中的bug之外,问题还可能出在正则表达式的使用上。在循环之前,我建议在
castResultType
中的单个元素上尝试正则表达式。

您(可能)面临的问题如下:
对于castResultType中的I

这一行所做的是在我们的
(列表)castResultType
中的值上循环,并将其元素分配给
i
。但是,当您调用
castResultType[i]
时,您要求的是一个不存在的列表索引

你可能想做的是:

范围内i的
(len(castResultType)):
cleanList.append(re.sub('[^\d\.]','',castResultType[i]))
#等
您还可以做的是:

CasterSultType中的i的
:
cleanList.append(re.sub('[^\d\.]','',i))
#等
有很多其他的方法来编码你想要做的事情,但是对于初学者来说,这些可能是最熟悉的


除了循环中的bug之外,问题还可能出在正则表达式的使用上。我建议在循环之前在
castResultType
中的单个元素上试验正则表达式。

您可以使用内置的
map
函数将函数映射到iterable中的项:

clean_list = list(map(lambda elem: re.sub('[^\d\.]', '', elem), castResultType))

您可以使用内置的
map
函数将函数映射到iterable中的项:

clean_list = list(map(lambda elem: re.sub('[^\d\.]', '', elem), castResultType))

您是否收到错误消息或错误结果?显示错误和一些数据,以及预期的结果和您得到的结果。我不明白你的问题是什么如果
castresultype
是一个列表,而你在castresultype:
中使用
for I,那么你必须使用
I
而不是
castresultype[I]
for
提供此列表中的值,而不是其索引
re.sub('[^\d\.]','',i)
@furas,所以我尝试运行这个castResultType=list(filterResultSet[1:32:5])cleanList=[]作为castResultType:cleanList.append(re.sub('[^\d.]','',i))print(cleanList)但我得到了错误“expected string或bytes like object”,filterResultSet是一个html标记列表,两个标记之间包含一个数据值。我正试图从标记中删除除值以外的所有字符。@furas,当我将I转换为str时,它就开始工作了。我很欣赏我实际上是值而不是索引的见解。最好用一些数据创建最小的工作代码-我不知道什么是
filterResultSet
,它是如何工作的。如果它是HTML标记,那么可能您应该首先获取没有标记的值/文本-作为字符串。您是否得到错误消息或错误结果?显示错误和一些数据,以及预期的结果和您得到的结果。我不明白你的问题是什么如果
castresultype
是一个列表,而你在castresultype:
中使用
for I,那么你必须使用
I
而不是
castresultype[I]
for
提供此列表中的值,而不是其索引
re.sub('[^\d\.]','',i)
@furas,所以我尝试运行这个castResultType=list(filterResultSet[1:32:5])cleanList=[]作为castResultType:cleanList.append(re.sub('[^\d.]','',i))print(cleanList)但我得到了错误“expected string或bytes like object”,filterResultSet是一个html标记列表,两个标记之间包含一个数据值。我正试图从标记中删除除值以外的所有字符。@furas,当我将I转换为str时,它就开始工作了。我很欣赏我实际上是值而不是索引的见解。最好用一些数据创建最小的工作代码-我不知道什么是
filterResultSet
,它是如何工作的。如果它是HTML标记,那么也许你应该首先得到不带标记的值/文本-作为字符串。这对我也很有用。谢谢这对我也很管用。谢谢你知道我如何在初始for循环之后再次使用clean_list的map函数而不是castResultType来实现这一点吗?例如,如果我运行两个正则表达式语句?我尝试运行clean_list=list(map(lambda elem:re.sub('[^\d\.]','',elem),cleanList)),但它仍然返回列表中的非数值。我最初在第一个正则表达式上也使用了不同的sub,这就是为什么我再次使用[^\d\.]运行的原因。如果您能对此提供一些见解,我将不胜感激。@2443您是否试图删除所有非数字字符?如果是这样,您应该能够使用
re.sub([^\d]*,'',elem)
。无论哪种方式,您都可以定义自己的函数
clean
,该函数接受字符串并返回已清理的版本。然后更换lambda f