Python问题:如何获取if语句中any()迭代内的i变量
问题原因
你写的any()里的生成器表达式是独立的局部作用域,里面的变量i只在生成器内部生效,一旦any()执行完,这个i就没法在外面的代码里访问了,所以会触发NameError。
解决方法
方法1:用普通循环遍历(直观易读)
直接遍历字符串的每个字符和对应的索引,找到第一个匹配的就记录索引并终止循环:
chars = set('qwertyuopasdfghjklizxcvbnm!"^+%&/()=?') myIndex = -1 # 预设没找到时的默认值 for idx, char in enumerate(myString): if char in chars: myIndex = idx break # 后续可根据myIndex是否为-1判断是否找到匹配字符
方法2:用next()结合生成器(简洁高效)
利用next()直接从生成器中取出第一个满足条件的索引,同时处理没找到的情况:
chars = set('qwertyuopasdfghjklizxcvbnm!"^+%&/()=?') try: myIndex = next(idx for idx, char in enumerate(myString) if char in chars) except StopIteration: # 没有找到匹配字符时的处理逻辑,比如设默认值 myIndex = -1
内容的提问来源于stack exchange,提问作者Seminet
相关产品推荐
相关产品推荐

