2024-09-29 23:17:51 发布
网友
我有一个由字母和数字组成的字符串,我想要一个由两个字母和数字组成的列表,即:
shv = "abcdef"
我想要:
('ab'; 'cd', 'ef')
我能做到:
thv = (shv[0:2], shv[2:4], shv[4:6])
但不知何故,这似乎有点不一般:有没有更好的方法,即对于任何一方的字符串和另一个分组值(例如按n个字母的组)
怎么样
>>> import re >>> re.findall("..", shv) ['ab', 'cd', 'ef']
对于任意长度(例如3),请使用{n}量词:
3
{n}
>>> shv = "abcdefghi" >>> re.findall(".{3}", shv) ['abc', 'def', 'ghi']
如果您想使用不完全匹配的剩余字母,请使用{1,n}:
{1,n}
>>> shv = "abcdefghijk" >>> re.findall(".{1,3}", shv) ['abc', 'def', 'ghi', 'jk']
您可以使用列表理解并使用^{}的step参数:
step
[shv[i:i+2] for i in range(0, len(shv)-1, 2)]
对于任意n:
n
def my_awesome_grouping_function(shv, n): return [shv[i:i+n] for i in range(0, len(shv)-(n-1), n)]
演示:
>>> 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']
我修剪了上界,因为我想你不会想要任何尾随的不完整对。你…吗?如果你去len(shv),我相信你会得到最后一个元素中剩下的len(shv) % n个字母。你知道吗
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']
(正如您在上面看到的,它必须是len(shv)-(n-1)才能进行修剪。)
len(shv)-(n-1)
对此,我同意textwrap,给出了一个优雅的解决方案:
textwrap
>>> import textwrap >>> >>> shv = "abcdef" >>> thv = textwrap.wrap(shv, 2) >>> thv ['ab', 'cd', 'ef']
如果您的尺寸不匹配,则会得到:
>>> thv = textwrap.wrap(shv, 4) >>> thb ['abcd', 'ef']
如果只想包含“complete”子字符串,可以使用以下理解:
>>> thv = [substr for substr in textwrap.wrap(shv, 4) if len(substr) == 4] >>> thv ['abcd']
怎么样
对于任意长度(例如
3
),请使用{n}
量词:如果您想使用不完全匹配的剩余字母,请使用
{1,n}
:您可以使用列表理解并使用^{} 的
step
参数:对于任意
n
:演示:
我修剪了上界,因为我想你不会想要任何尾随的不完整对。你…吗?如果你去
len(shv)
,我相信你会得到最后一个元素中剩下的len(shv) % n
个字母。你知道吗(正如您在上面看到的,它必须是
len(shv)-(n-1)
才能进行修剪。)对此,我同意
textwrap
,给出了一个优雅的解决方案:如果您的尺寸不匹配,则会得到:
如果只想包含“complete”子字符串,可以使用以下理解:
相关问题 更多 >
编程相关推荐