我有以下“嵌入式”生成器表达式:
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
。这对我来说很有意义,但是我不确定如何修改代码。我只想打印长度最大的单词。
我误会什么?
答案 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}}