Python str() 不是由列表理解调用的



当我使用列表推导时,与仅使用 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'

希望它能帮助你:)

最新更新