Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试将字符串分成5个块_Python_String_Python 3.x - Fatal编程技术网

Python 尝试将字符串分成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)] 想想特

我正试图用以下方法将我的字符串分成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组