如何使用过滤器功能识别特殊字符的索引



我正在尝试使用各种生成器函数(我认为我需要使用过滤器生成器(来识别字符串中特殊字符的索引位置(python 3.7中(

使用"扩展"代码我可以按以下方式编写

string = "4+10*3"
for (index,char) in enumerate(string):
    if char in ["*", "+"]: print (index)

我正在努力使我的发电机表达式工作。这就是我写的:

filter(lambda i: index for (index,char) in enumerate(string) in ["*", "+"], string)

我知道这确实不是一件有用的事情,但是我想看看它是否可能,因为我刚刚了解了过滤器功能,并认为是否可以看到它是否可能会很有趣。

谢谢

您不能在lambda中具有这样的循环。 lambda是一个匿名函数,它返回一个值。

一个不错的trick与匹配一起提取索引是zip字符和索引在一起,然后将过滤器函数应用于字符

string = "4+10*3"
indexes = list(range(len(string)))
zip_iter = zip(string, indexes)
#[('4', 0), ('+', 1), ('1', 2), ('0', 3), ('*', 4), ('3', 5)]
#Zip characaters in the string and indexes together, then check if the character lies in the list
print(list(filter(lambda i: i[0] in ["*", "+"], zip_iter)))

输出将为

[('+', 1), ('*', 4)]

最新更新