【发布时间】:2018-10-03 14:31:33
【问题描述】:
当我使用列表推导式时,与仅使用 for 循环相比,当我打印嵌套的对象列表时会得到不同的结果。
class Feature:
def __str__(self) -> str:
return 'f'
featList = [[Feature() for j in range(3)] for i in range(10)]
[print(str(f)) for f in [r for r in featList]]
for r in featList:
[print(str(f)) for f in r]
第一次打印给了我类似的东西:
[main.Feature 对象在 0x0000026AB6371588>, main.Feature 对象位于 0x0000026AB63BA8D0>, main.Feature 对象位于 0x0000026AB4966BE0>]
第二次打印给我 30 次“f”。
【问题讨论】:
-
[print(str(f)) for f in [r for r in featList]]这会将打印函数对象返回到您的列表中。这就是它的工作原理。虽然我不知道为什么你需要把 print 放在你的列表中..... -
f不会遍历每个人r;它正在遍历rs 的 lists 列表 -
您在对象列表上调用 str,而不是在 Feature 上。虽然在将列表转换为字符串时,它会调用 repr 来获取对象的可打印版本。不过,您应该使用循环,因为它们有意义。