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

时间:2019-05-19 08:40:16

标签: python

我正在尝试使用各种生成器函数(我认为我需要使用过滤器生成器)来识别字符串中特殊字符的索引位置(在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)

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

谢谢

1 个答案:

答案 0 :(得分:1)

您不能在lambda中有一个for循环。 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)]