我不明白为什么情况1的输出不打印,而在使用list
后的第二种情况下,输出正常。
情况一:
s='india'
print(reversed(s))
输出
<reversed object at 0x...>
情况二:
s='india'
print(list(reversed(s)))
输出
['a', 'i', 'd', 'n', 'i']
答案 0 :(得分:3)
来自Python文档:
返回一个反向迭代器。 seq必须是具有
__reversed__()
方法或支持序列协议(__len__()
方法和带有整数的__getitem__()
方法 参数从0开始)。
构造函数构建一个列表,其项目相同且相同 订购可重复的商品。可迭代的可能是序列, 支持迭代的容器或迭代器对象。如果可迭代 已经是列表,将创建并返回副本,类似于 可迭代[:]。例如,
list('abc')
返回['a', 'b', 'c']
,然后list( (1, 2, 3) )
返回[1, 2, 3]
。如果没有给出参数,则 构造函数创建一个新的空列表[]
。
所以:
reversed(string)
将返回一个迭代器,该迭代器向后遍历字符串。 list(iterator)
将该迭代器转换为列表。 list(string)
会将字符串分成其组成字符。
因此
list('india')
返回['i', 'n', 'd', 'i', 'a']
reversed('india')
返回<reversed object at 0x1090b48d0>
,它是一个迭代器
您可以使用list
运算符将迭代器转换为列表:
list(reversed('india'))
返回['a', 'i', 'd', 'n', 'i']
或者您可以遍历它:
for n in reversed('india'):
print(n)
打印出来的
a
i
d
n
i
答案 1 :(得分:0)
如果要反转字符串,请尝试以下操作:
string = ''.join(reversed(s))
这是因为反转输出了一个迭代器,该迭代器不保存值,而是动态计算它们。 ``.join部分消耗了生成器并生成了一个字符串。
有关生成器/迭代器的更多信息,请参见here。