当我使用列表推导时,与仅使用 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>主要。0x0000026AB6371588>处的要素对象,<<strong>主。特征 对象位于0x0000026AB63BA8D0>,<<strong>主。功能对象位于 0x0000026AB4966BE0>]
第二次打印给我"f"30次。
问题是你是如何迭代的
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]
a 这是一个 f 的列表,所以现在你可以做你想做的事了。
[ print(str(f)) for r in featList for f in r]
如果你在 Python 的文档中看到列表理解部分的最后一部分
对于这样的情况,您将看到有示例(双列表理解(
把它想象成一个常规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)
除了声明之外,顺序几乎相同。
它适用于列表理解,但您应该重写列表理解
[print(f) for r in featList for f in r]
如果要运行
[print(str(f)) for f in [r for r in featList]]
比您可以在Feature
中实现__repr__
:
def __repr__(self) -> str:
return 'f'
希望它能帮助你:)