我正在尝试使用各种生成器函数(我认为我需要使用过滤器生成器)来识别字符串中特殊字符的索引位置(在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)
我知道这并不是一件真正有用的事情,但是我想看看它是否可行,因为我刚刚了解了过滤器功能,并认为如果有可能会很有趣。
谢谢
答案 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)]