sam*_*249 1 python list-comprehension
当列表理解优先于for循环时,是否有一般规则?例如:
转换为推导式时,单个 for 循环很棒:
l = []
for word in sentence:
l.append(word)
# [word for word in sentence]
Run Code Online (Sandbox Code Playgroud)
双人也可能是:
l = []
for word in sentence:
for letter in word:
l.append(letter)
# [letter for word in sentence for letter in word]
Run Code Online (Sandbox Code Playgroud)
但是,我认为在那之后可读性变得很差。例如,使用ifs:
l = []
for word in sentence:
if word.startswith('u'):
for letter in word:
if letter in ('a', 'b', 'c', 'o'):
l.append(letter)
# [letter for word in sentence if word.startswith('u') for letter in word if letter in ('a', 'b', 'c', 'o')]
Run Code Online (Sandbox Code Playgroud)
是否有关于for循环模式的复杂性的建议,如果尝试将其放入列表理解中会更糟?
答案取决于你的意见。但是,由于我确实记得一位在 Python 社区备受推崇的书的作者提出的具体建议,因此我可以分享 Luciano Ramalho 所著的《Fluent Python》一书中的以下摘录:
for 循环可以用来做很多不同的事情:扫描一个序列来计数或挑选项目、计算聚合(总和、平均值)或任意数量的其他处理任务。[...] 相比之下,listcomp 只能做一件事:构建一个新列表。
当然,滥用列表推导式编写真正难以理解的代码是可能的。我已经看到带有 listcomps 的 Python 代码只是用来重复一段代码以产生副作用。
如果您没有对生成的列表执行某些操作,则不应使用该语法。
另外,尽量保持简短。如果列表理解跨越两行以上,最好将其拆分或重写为普通的旧 for 循环。使用您的最佳判断:对于 Python 和英语,清晰写作没有硬性规定。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |