gpt4 book ai didi

python - 将列表理解转换为 for 循环

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:03 25 4
gpt4 key购买 nike

假设我有这个列表和以下将列表格式化为易于阅读的格式的代码:

a = ['erin', 'david', 'chris', 'adam']

print('\n'.join('{}: {}'.format(i,j) for i,j in reversed(list(enumerate(a,1)))))

输出是这样的:

4: adam
3: chris
2: david
1: erin

如果我将上面的代码转换为 for 循环,我发现为了获得与上面相同的结果,您必须删除 .join() 方法。

for 循环看起来像这样:

for i, j in reversed(list(enumerate(a,1))):
print ('{}: {}'.format(i,j))

输出:

 4: adam
3: chris
2: david
1: erin

对我来说,for 循环更有意义,我只是不明白为什么在列表理解中,我需要 join() 方法来获得相同的结果。

最佳答案

从技术上讲,您使用的是生成器表达式,而不是列表理解。

真正重要的问题(在我看来)是为什么首先需要 join,原因是 print 不会迭代可迭代对象作为参数传递,它只是调用 __str__ 方法来获取对象的字符串表示形式,并打印出来。对于 list__str__ 方法生成显示其元素的列表表示,因此看起来好像 print 遍历了列表,当它实际上没有。

如果您显式写出生成器表达式:

>>> g = ('{}: {}'.format(i,j) for i,j in reversed(list(enumerate(a,1))))

然后尝试打印它,您将只看到有关该对象的信息:

>>> print(g)
<generator object <genexpr> at 0x10fb929e8>

如果你遍历它,你会为列表中的每个元素得到一个字符串 a:

>>> next(g)
'4: adam'
>>> next(g)
'3: chris'
>>> next(g)
'2: david'
>>> next(g)
'1: erin'

'\n'.join 字符串方法确实遍历您传递给它的参数,并将每个结果连接成一个字符串:

>>> g = ('{}: {}'.format(i,j) for i,j in reversed(list(enumerate(a,1))))
>>> '\n'.join(g)
'4: adam\n3: chris\n2: david\n1: erin'

当您使用 for 循环时,您还会迭代生成器表达式的结果,并打印每个结果。

关于python - 将列表理解转换为 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31107189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com