首页 > 解决方案 > 如何使用过滤功能识别特殊字符的索引

问题描述

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

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

谢谢

标签: python

解决方案


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

一个很好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)]

推荐阅读