我试图将我的字符串分成5个块:
message = [no_space[i + i+5] for i in range(0, len(no_space))]
no_space是没有空格的相同字符串
但是代码一直在输出:
IndexError: list index out of range
字符串长度为171
那么我该如何解决这个问题呢?
答案 0 :(得分:3)
你可能打算这样做:
message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]
考虑代码中针对特定i
会发生什么,例如90
。 90
完全在范围内,因为您指定的范围是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)]