【问题标题】:How to Create a String From Iterator in Python?如何在 Python 中从迭代器创建字符串?
【发布时间】: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()) 会给你类似的东西。

标签: python string iterator


【解决方案1】:

''.join 本身只需要一个可迭代的;您不必先创建列表。

>>> ''.join(reversed(s))
'edcba'

不过,s[::-1] 并没有错;事实上,它比使用''.join 连接来自reversed 对象的元素要快很多。

【讨论】:

  • 哦,谢谢,不知道。顺便问一下join()的时间复杂度是多少?
  • 注意 实现细节,.join 在底层实现了一个列表。
猜你喜欢
  • 2014-03-17
  • 2020-09-09
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 2011-09-05
相关资源
最近更新 更多