【发布时间】:2021-04-03 17:28:03
【问题描述】:
如何在 Python 中通过迭代器创建字符串?
我目前只是想创建一个字符串的反向副本,我知道我可以使用 slice:
s = 'abcde'
reversed_s = s[::-1]
我还可以从迭代器创建一个列表并加入该列表:
s = 'abcde'
reversed_s_it = reversed(s)
reversed_list = list(reversed_s_it)
reversed_s = ''.join(reversed_list)
但是当我尝试直接从迭代器创建一个字符串时,它只是给出了迭代器的一个字符串表示,如果我这样做:
s = 'abcde'
reversed_s_it = reversed(s)
reversed_s = str(reversed_s_it)
reversed_s 将给出迭代器的字符串表示,而不是通过迭代迭代器来创建字符串。
print(reversed_s)
输出
<reversed object at 0x10c3dedf0>
还有
print(reversed_s == 'edcba')
输出
False
因此,我只想知道是否有 Pythonic 方法可以从迭代器创建字符串?
【问题讨论】:
-
''.join(reversed(s))有什么问题? -
@chepner,我只是不喜欢使用额外的空间来创建额外的列表来构造字符串,我不确定是否有更好的方法
-
迭代器可以通过使用 list() 或 tuple() 构造函数实现为列表或元组。所以很难想象还有另一种方法可以跳过这一步。
-
String 是 python 中的可迭代对象。并且 type(reversed_s) 将其显示为 str 对象,当您说“reversed_s 仍然是迭代器”时,您是什么意思
-
@SiAce 因为这是该迭代器的字符串表示形式,这是您在执行
str(reversed_s_it)时所要求的,与任何对象相同,恰好是默认的__str__实现继承来自object,所以,例如,class Foo: pass然后print(Foo())会给你类似的东西。