返回按两个分组的字符串字母列表

zlr*_*zlr 3 python

我有一个由字母和数字组成的字符串,我想要一个按两个分组的列表,即我有:

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个字母组组成)

2rs*_*2ts 5

您可以使用列表推导并使用以下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)修剪工作.)

  • 哈哈独家限量! (2认同)