【问题标题】:Split string into a list, with items of equal length [duplicate]将字符串拆分为列表,项目长度相等[重复]
【发布时间】:2014-05-04 14:32:05
【问题描述】:

我有一个字符串(没有空格),我需要将其拆分成一个长度相等的列表。我知道split() 方法,但据我所知,这仅通过空格而不是通过长度进行拆分。

我想做的是这样的:

string = "abcdefghijklmnopqrstuvwx"
string = string.Split(0 - 3)
print(string)

>>> ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx"]

我曾想过循环遍历列表,但我想知道是否有更简单的解决方案?

【问题讨论】:

  • @m.wasowski 您所指的问题要求迭代器,它略有不同。

标签: python string list split


【解决方案1】:
>>> [string[start:start+4] for start in range(0, len(string), 4)]
['abcd', 'efgh', 'ijkl', 'mnop', 'qrst', 'uvwx']

即使最后一段少于 4 个字符也能正常工作。

PS:在 Python 2 中,应使用xrange() 而不是range()

【讨论】:

  • 完美,就像一个魅力,现在我只需要再等 4 分钟来接受答案!
【解决方案2】:

或:

map(lambda i: string[i:i+4], xrange(0, len(string), 4))

【讨论】:

  • xrange 不错。但是 map+lambda 显然并不比列表理解更清晰……
【解决方案3】:

使用textwrap标准库模块:

>>> import textwrap
>>> textwrap.wrap('abcdefghijklmnopq', 4)
['abcd', 'efgh', 'ijkl', 'mnop', 'q']

编辑:废话,这不适用于空格。仍然在这里留下答案,因为上次我遇到您的问题时,我实际上是在尝试换行,所以也许其他人也有同样的问题。

【讨论】:

  • 这在“嗨!\n哦!\n啊!”上失败。事实上,textwrap.wrap() 用于包含单词的段落。
  • 我才注意到,可惜。
【解决方案4】:

怎么样:

>>> string = 'abcdefghijklmnopqrstuvwx'
>>> map(''.join, zip(*[iter(string)]*4))
['abcd', 'efgh', 'ijkl', 'mnop', 'qrst', 'uvwx']
>>>

【讨论】:

  • 可爱但浪费:字符串被分解为稍后重新组合的字符。另外,当字符串的长度不是 4 的倍数时,这无法选择最后一个字符。
猜你喜欢
  • 2016-01-16
  • 2021-08-11
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2012-11-20
  • 2011-01-08
相关资源
最近更新 更多