Python 尝试将字符串分成5个块
我正试图用以下方法将我的字符串分成5块:Python 尝试将字符串分成5个块,python,string,python-3.x,Python,String,Python 3.x,我正试图用以下方法将我的字符串分成5块: message = [no_space[i + i+5] for i in range(0, len(no_space))] 没有空格是没有空格的同一字符串 但代码一直在输出: IndexError: list index out of range 字符串长度是171 那么我该如何解决这个问题呢?您可能打算这样做: message = [no_space[i:i+5] for i in range(0, len(no_space), 5)] 想想特
message = [no_space[i + i+5] for i in range(0, len(no_space))]
没有空格是没有空格的同一字符串
但代码一直在输出:
IndexError: list index out of range
字符串长度是171
那么我该如何解决这个问题呢?您可能打算这样做:
message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]
想想特定的i
,比如90
,在代码中会发生什么90
完全在范围内,因为您指定的范围是从0
到(但不包括)len(无空格)
,即171
如果i==90
,则i+i+5==90+90+5==185
。然后使用无空格[185]
请求无空格的元素185
。由于no_space
的长度只有171
个字符,因此不能请求元素185
,因此您得到了索引器
希望本例将解释这段新代码的工作原理,使用一个短字符串并拆分为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']
您可能打算这样做:
message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]
想想特定的i
,比如90
,在代码中会发生什么90
完全在范围内,因为您指定的范围是从0
到(但不包括)len(无空格)
,即171
如果i==90
,则i+i+5==90+90+5==185
。然后使用无空格[185]
请求无空格的元素185
。由于no_space
的长度只有171
个字符,因此不能请求元素185
,因此您得到了索引器
希望本例将解释这段新代码的工作原理,使用一个短字符串并拆分为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']
尝试在最终索引的5范围内获取i的值。因此,例如,当您尝试使用i为168时,您超出了i+5允许的索引
我还注意到在无空间索引中使用+的错误。我想你是想分一杯羹。例如,当i为10时,实际上得到索引25处的单个元素。当我83岁时,你会得到一个171的索引,这是一个无效的索引
如果你抓取一个5的切片,你需要跳到下一个可用的索引(一次添加5个),并修复切片的错误
message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]
尝试在最终索引的5范围内获取i的值。因此,例如,当您尝试使用i为168时,您超出了i+5允许的索引
我还注意到在无空间索引中使用+的错误。我想你是想分一杯羹。例如,当i为10时,实际上得到索引25处的单个元素。当我83岁时,你会得到一个171的索引,这是一个无效的索引
如果你抓取一个5的切片,你需要跳到下一个可用的索引(一次添加5个),并修复切片的错误
message = [no_space[i:i+5] for i in range(0, len(no_space), 5)]
(一个提供各种有用实用程序的库,同时支持Python 2和Python 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
或者,您可以在程序中包含此功能的简单实现(与Python 2.7和3兼容):
它的行为是相同的(至少对于您的数据;Funcy的chunks
也适用于迭代器,但事实并非如此):
(一个提供各种有用实用程序的库,同时支持Python 2和Python 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
或者,您可以在程序中包含此功能的简单实现(与Python 2.7和3兼容):
它的行为是相同的(至少对于您的数据;Funcy的chunks
也适用于迭代器,但事实并非如此):
相关的:相关的:Thansk你的第一段代码成功了,但它到底意味着什么?谢谢!!这段代码运行得非常好。然而,我不太明白它的意思,所以请详细说明matter@ZacCotterell在手机上,但是,请看列表理解谢谢,但出于某种原因,我还是不明白,所以你可以提出另一种方法,将信息分成5组吗?谢谢,但出于某种原因,我还是不明白,所以你可以提出另一种方法,将信息分成5组吗?你的第一段代码成功了但这到底意味着什么?谢谢!!这段代码运行得非常好。然而,我不太明白它的意思,所以请详细说明matter@ZacCotterell在手机上,但是,请看列表理解谢谢,但出于某种原因,我仍然没有理解,所以你可以提出另一种方法,将信息分为5组。谢谢,但是出于某种原因,我仍然没有理解,所以你可以提出另一种方法,将信息分为5组