为什么在使用print(iterable)时输出未打印?

时间:2018-07-27 15:53:17

标签: python python-2.7

我不明白为什么情况1的输出不打印,而在使用list后的第二种情况下,输出正常。

情况一:

s='india'

print(reversed(s))

输出

<reversed object at 0x...>

情况二:

s='india'

print(list(reversed(s)))

输出

['a', 'i', 'd', 'n', 'i']

2 个答案:

答案 0 :(得分:3)

来自Python文档:

reversed(seq)

  

返回一个反向迭代器。 seq必须是具有   __reversed__()方法或支持序列协议(   __len__()方法和带有整数的__getitem__()方法   参数从0开始)。

list([iterable])

  

构造函数构建一个列表,其项目相同且相同   订购可重复的商品。可迭代的可能是序列,   支持迭代的容器或迭代器对象。如果可迭代   已经是列表,将创建并返回副本,类似于   可迭代[:]。例如,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