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)
我知道这并不是一件真正有用的事情,但我想看看它是否可能,因为我刚刚了解了过滤器功能并认为看看它是否可能会很有趣。
谢谢
解决方案
在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)]
推荐阅读
- nunjucks - Nunjucks:同时循环两个数组
- python - 在 Python 和 openpyxl 中处理小时和分钟 - Excel 格式化与字符串和整数
- python - Django 和 Amazon S3
- opengl - ASSIMP 网格负载的奇怪问题
- java - 为什么在 Java3D 中超过 1.0f 的所有内容都被剪切了?
- javascript - Vue 更新 v-for 循环中的所有输入字段,而不是只更新一个
- flutter - Flutter:路径缩放导致形状不对齐,我该如何对齐?
- python - 列表包含重复的 Python 解决方案
- javascript - 对静态图像文件的请求返回了奇怪的数据
- swift - isEditing 模式下的 Swift Tableview 不会取消选择单元格