试图将字符串分成5个块

时间:2016-03-04 19:16:51

标签: python string python-3.x

我试图将我的字符串分成5个块:

message = [no_space[i + i+5] for i in range(0, len(no_space))]

no_space是没有空格的相同字符串

但是代码一直在输出:

IndexError: list index out of range

字符串长度为171

那么我该如何解决这个问题呢?

3 个答案:

答案 0 :(得分:3)

你可能打算这样做:

message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]

考虑代码中针对特定i会发生什么,例如9090完全在范围内,因为您指定的范围是0到(但不包括)len(no_space)171

如果i == 90,则i + i+5 == 90 + 90+5 == 185。然后,您使用185请求no_space的元素no_space[185]。由于no_space只有171个字符,因此您无法请求元素185,因此您获得了IndexError

希望这个例子能解释这个新代码是如何工作的,用一个短字符串并分成3个:

>>> s = 'abcdefghijk'
>>> len(s)
11
>>> list(range(0, len(s), 3))
[0, 3, 6, 9]
>>> s[0:3]
'abc'
>>> s[3:6]
'def'
>>> s[6:9]
'ghi'
>>> s[9:12]
'jk'
>>> [(i, i+3) for i in range(0, len(s), 3)]
[(0, 3), (3, 6), (6, 9), (9, 12)]
>>> [s[i:i+3] for i in range(0, len(s), 3)]
['abc', 'def', 'ghi', 'jk']

答案 1 :(得分:1)

Funcy(一个提供各种有用实用程序的库,支持Python 2和3)提供了chunks function,它可以完成这个:

postLoaders: [
  {
    loader: "transform?brfs"
  }
],
loaders: [
  {
    test: /\.js$/,
    loader: "babel"
  }
]

或者,您可以在程序中包含一个简单的实现(与Python 2.7和3兼容):

>>> import funcy
>>> data = b'abcdefghijklmnopqrstuvwxyz'
>>> list(funcy.chunks(6, data))
[b'abcdef', b'ghijkl', b'mnopqr', b'stuvwx', b'yz']   # Python 3
['abcdef', 'ghijkl', 'mnopqr', 'stuvwx', 'yz']        # Python 2.7

它的行为相同(至少对于您的数据而言; Funcy' s def chunked(size, source): for i in range(0, len(source), size): yield source[i:i+size] 也可以与迭代器一起使用,但不是这样):

chunks

答案 2 :(得分:0)

message = [no_space[i + i+5] for i in range(0, len(no_space))]

尝试在最终索引的5中获取i的值。因此,当您尝试使用168的i时,您将超越i + 5的允许索引

我刚刚注意到在no_space索引中使用+的错误。我想你想要分一杯羹。例如,当我是10时,你实际上得到索引25处的单个元素。当我是83时,你得到的索引是171,这是一个无效的索引。

如果您获取5个切片,则需要跳到下一个可用索引(一次添加5个)并修复切片拼写错误。

message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]
相关问题