使用列表理解时,与仅使用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]
第一张照片给了我类似的东西
[<< strong> main 。功能对象位于0x0000026AB6371588>, main 。功能 对象位于0x0000026AB63BA8D0>,主。功能对象位于 0x0000026AB4966BE0>]
第二张照片给了我“ f” 30次。
答案 0 :(得分:0)
它适用于列表理解,但您应该重写列表理解
[print(f) for r in featList for f in r]
如果要运行
[print(str(f)) for f in [r for r in featList]]
比您可以在__repr__
中实现Feature
:
def __repr__(self) -> str:
return 'f'
希望它会对您有所帮助:)
答案 1 :(得分:0)
问题是您如何迭代
featList = [[Feature() for j in range(3)] for i in range(10)]
功能列表列表
a = [f for f in [r for r in featList]]
a
是功能列表的列表(仍然)
你可以这样做
a = [ f for r in featList for f in r]
an这是f的列表,所以现在您可以执行想要的操作了。
[ print(str(f)) for r in featList for f in r]
如果您在Python's Docs
处看到了列表理解部分的最后一部分对于这样的情况(双重列表理解),您将看到具有示例的
将其视为常规的for
# Regular for
for a in A
for b in A
f(b)
# Comprehended Loop
a = ( f(b) for a in A for b in a)
除了语句外,它的顺序几乎相同。