首页 > 解决方案 > 嵌入式生成器表达式

问题描述

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

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)

我读这篇文章的方式(请纠正我)是,对于每个wordin words,将它的长度与每个wordin进行比较,并且只有当它的长度等于或大于所有其他单词words时才“返回” 。y

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

我有什么误解?

标签: python

解决方案


在第一个循环中,未定义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']

推荐阅读