为了账号安全,请及时绑定邮箱和手机立即绑定

列表理解未调用 Python str()

列表理解未调用 Python str()

慕尼黑8549860 2021-06-30 09:23:20
当我使用列表理解时,当我打印一个嵌套的对象列表时,我得到了不同的结果,与我只使用 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”。
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

问题是你如何迭代


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 for

for a in A

   for b in A

       f(b)


# Comprehended Loop

a = ( f(b) for a in A for b in a)

除了语句之外,它的顺序几乎相同。


查看完整回答
反对 回复 2021-07-06
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

它适用于列表理解,但你应该重写你的列表理解


[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'

希望它会帮助你:)


查看完整回答
反对 回复 2021-07-06
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信