我有一个由字母和数字组成的字符串,我想要一个按两个分组的列表,即我有:
shv = "abcdef"
Run Code Online (Sandbox Code Playgroud)
而且我要:
('ab'; 'cd', 'ef')
Run Code Online (Sandbox Code Playgroud)
我可以 :
thv = (shv[0:2], shv[2:4], shv[4:6])
Run Code Online (Sandbox Code Playgroud)
但不知怎的,这看起来有点不通用:有没有更好的方法,即对于任何一方的字符串和另一个分组值(例如,由n个字母组组成)
您可以使用列表推导并使用以下step参数range:
[shv[i:i+2] for i in range(0, len(shv)-1, 2)]
Run Code Online (Sandbox Code Playgroud)
任意n:
def my_awesome_grouping_function(shv, n):
return [shv[i:i+n] for i in range(0, len(shv)-(n-1), n)]
Run Code Online (Sandbox Code Playgroud)
演示:
>>> shv="abcdef"
>>> [shv[i:i+2] for i in range(0, len(shv)-1, 2)]
['ab', 'cd', 'ef']
>>> [shv[i:i+3] for i in range(0, len(shv)-2, 3)]
['abc', 'def']
Run Code Online (Sandbox Code Playgroud)
我修剪了上限,因为我认为你不会想要任何尾随的不完整对.你呢?如果你只是去,len(shv)我相信你会得到len(shv) % n最后一个元素中的剩余字母.
>>> shv="abcdefgh"
>>> [shv[i:i+3] for i in range(0, len(shv), 3)]
['abc', 'def', 'gh']
>>> [shv[i:i+3] for i in range(0, len(shv)-1, 3)]
['abc', 'def', 'gh']
>>> [shv[i:i+3] for i in range(0, len(shv)-2, 3)]
['abc', 'def']
Run Code Online (Sandbox Code Playgroud)
(如上所述,它必须是len(shv)-(n-1)修剪工作.)