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
in words
,将它的长度与每个word
in进行比较,并且只有当它的长度等于或大于所有其他单词words
时才“返回” 。y
我得到错误local variable 'x' referenced before assignment
。这对我来说很有意义,但我不确定如何修改代码。我只想打印长度最大的单词。
我有什么误解?
解决方案
在第一个循环中,未定义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']
推荐阅读
- jira - 使用 API 获取已删除的 JIRA 问题列表
- c++ - 由多个分隔符分割 C++
- flutter - Flutter - 网格视图,如果所有项目都在屏幕上可见,则停止滚动
- r - 将列表转换为具有两个标识符的矩阵
- xml - SSMS - 如何使用 MDX 查询提供/编辑/发送“RequestParameters”
- docker - 如何使用不同公共网络或区域的主机设置 Docker Overlay 网络?
- oracle - 如何使用 Oracle.jl 遍历 oracle 结果集的行和列?
- zapier - 如何在 zap 操作期间从输入字段获取实时数据?
- powershell - 用于验证多个 Active Directory 组存在的 Windows PowerShell 脚本
- python - 将一列(固定字段宽度)数据帧转换为多列数据帧(Databricks,pyspark)