【发布时间】:2010-05-30 19:53:08
【问题描述】:
project_keys = sorted(projects.keys())的原始列表是[101, 102, 103, 104, 105, 106, 107, 108, 109, 110],其中以下项目今年被视为invalid:108、109、110。
因此:
for project in projects.itervalues():
# The projects dictionary is mapped to the Project class
if project.invalid:
# Where invalid is a Bool parameter in the Project class
project_keys.remove(project.proj_id)
print project_keys
这将返回一个整数列表(即项目 ID):
[101, 102, 103, 104, 105, 106, 107]
甜。
现在,我希望它使用列表推导式尝试同样的事情。
project_keys = [project_keys.remove(project.proj_id) for project in projects.itervalues() if project.invalid
print project_keys
这会返回:
[None, None, None]
所以我要填充一个与已删除元素相同编号的列表,但它们是Nones?
谁能指出我做错了什么?
此外,我为什么要在顶部的 for-if 块上使用列表推导?简明?好看吗?
【问题讨论】:
-
嗯,理解显然有效,但显然不如预期。标题已更新。
-
@Az,以及那些认为我不应该提供相当于 RTFM 的答案的人:我建议更多地咨询文档的原因是我看到你最近一直在努力工作。这并没有错,但是虽然您的一些问题是真实的,但“我该如何解决这个问题?” (好),其他人在我看来更像是“我不想查这个;你们能告诉我吗?” (在我看来,不太好)。我没有恶意;尽管有些人可能会这么想,但我不是反对新手,只是支持文档。
-
@John Y:时间有点压力。此外,Python 文档——虽然对我理解良好或已广泛使用的部分很有用——对于初学者来说仍然是相当迟钝的。我知道我需要转向解决方案的构建块,但有时我发现文档模糊了我的路径。你明白我的意思吗?我理解你的担心,都一样。此外,stackoverflow.com 的成员向我展示了一些非常有趣的方法来处理问题,这是
learning的经验。我支持学习;)