为什么这个生成器表达式会引发语法错误?

use*_*294 0 python list any python-3.x

这行抛出一个错误,说我没有定义,x即使我说这x是列表的一个元素:

any(i.isdigit() for i in x for x in [name.id for name in all.names])
Run Code Online (Sandbox Code Playgroud)

所以x是列表的一个字符串元素,我检查如果每个元素一些字符x,该元素x包含使用一个号码.isdigit().为什么这不起作用?

Ry-*_*Ry- 5

Python中的理解/生成器表达式从左到右嵌套(是的,它可能有点令人困惑).交换它们:

for x in [name.id for name in all.names] for i in x
Run Code Online (Sandbox Code Playgroud)

或者为了清楚起见分开:

def contains_digit(s):
    return any(c.isdigit() for c in s)


any(contains_digit(name.id) for name in all.names)
Run Code Online (Sandbox Code Playgroud)