嵌入式生成器表达式

时间:2019-03-09 12:19:06

标签: python

我有以下“嵌入式”生成器表达式:

words = ["a", "ab", "abc"]
for a in (y for y in words if len(y) >= len(x) for x in (b for b in words)):
    print(a)

我的阅读方式(请纠正我)是,将word中的每个words的长度与word中的每个words的长度进行比较,仅“返回” y,如果长度等于或大于所有其他单词。

我收到错误local variable 'x' referenced before assignment。这对我来说很有意义,但是我不确定如何修改代码。我只想打印长度最大的单词。

我误会什么?

2 个答案:

答案 0 :(得分:4)

在第一个for循环中,未定义变量x。您必须定义两个for循环。然后在末尾使用if语句。像这样:

for a in (y for y in words for x in (b for b in words) if len(y) >= len(x)):
    # ....

我认为您需要Python内置的max函数:

>>> words = ["a", "ab", "abc"]
>>> print(max(words))
'abc'

更新:在列表中查找所有最大尺寸的字符串:

>>> words = ["a", "ab", "abc", "def"]
>>> print([i for i in a if len(i) == len(max(a))])
['abc', 'def']

答案 1 :(得分:1)

这是使用all()的修改:

for a in (y for y in words if all ([len(y) >= len(x) for x in words])):
    print (a)

输出:

abc

all()提供了您所缺少的关键语义-现在a列表中的所有words中超过所有其他{strong> 的all()都打印为印刷品字长。

没有words = ["a", "ab", "abc", "cba"] ,即使您摆脱了错误,也不会获得所需的正确输出。

列表稍有不同:

cba
abc

您得到:

{{1}}