当我使用列表理解时,当我打印一个嵌套的对象列表时,我得到了不同的结果,与我只使用 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)
除了语句之外,它的顺序几乎相同。
慕丝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'
希望它会帮助你:)
添加回答
举报
0/150
提交
取消