列表理解未调用 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]

第一次打印给了我一些东西,比如:


[<位于 0x0000026AB6371588 处的主.Feature 对象>,<位于 0x0000026AB63BA8D0 处的主.Feature 对象>,<位于 0x0000026AB4966BE0 处的主.Feature 对象>]


第二次打印给了我 30 次“f”。


慕尼黑8549860
浏览 103回答 2
2回答

BIG阳

问题是你如何迭代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]这是一个 f 的列表,所以现在你可以做你想做的。[ print(str(f)) for r in featList for f in r]如果您在Python 的文档中看到 List Comprehension 部分的最后一部分你会看到这个例子,对于这样的情况(双重列表理解)把它当作常规 for# Regular forfor a in A&nbsp; &nbsp;for b in A&nbsp; &nbsp; &nbsp; &nbsp;f(b)# Comprehended Loopa = ( f(b) for a in A for b in a)除了语句之外,它的顺序几乎相同。

慕丝7291255

它适用于列表理解,但你应该重写你的列表理解[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:&nbsp; &nbsp; return 'f'希望它会帮助你:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python