如何创建一个函数,根据输入参数将字符串拆分任意次数?

2024-09-22 20:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个函数,将字符串拆分为多个项,然后将这些项进一步拆分为子项,并连续执行此操作,直到参数用完为止。你知道吗

例如,我想先用逗号拆分下面的字符串,然后用行拆分,然后用感叹号拆分,最后用字母b拆分。这就是四个拆分。你知道吗

s = 'abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!'

使用以下方法可以得到所需的结果:

split1 = s.split(',')
split2 = map(lambda i:i.split("|"),split1)
split3 = map(lambda i: map(lambda subitem: subitem.split("!"),i),split2)
split4 = map(lambda i: map(lambda subitem: map(lambda subsubitem: subsubitem.split("b") ,subitem),i),split3)

结果:

[[[['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['']]]]

但是,我想编写一个函数,可以执行整个过程并接受任意数量的参数。也就是说,该函数可以执行上述过程,但只能对感叹号和行进行拆分,也可以对任意数量的项进行拆分。你知道吗

我怎样才能使一个函数完成上述过程,但看起来像这样?你知道吗

func(s,*args)

这样它就可以执行以下操作来实现与上面相同的结果。你知道吗

func(s,",","|","!","b")

Tags: lambda函数字符串map参数过程splitabcde
2条回答
from string import split
def rec_split(s, *tokens):
    if tokens == ():
        return s
    else:
      return map(lambda x: rec_split(x, *tokens[1:]), split(s, tokens[0]))

对我来说这给了:

In [669]: s = (
    'abcde,abcde|abcde!abcde,abcde|abcde!'
    'abcde,abcde|abcde!abcde,abcde|abcde!'
    'abcde,abcde|abcde!abcde,abcde|abcde!'
    'abcde,abcde|abcde!abcde,abcde|abcde!'
)

In [670]: rec_split(s, ",", "|", "!", "b")
Out[670]: 
[[[['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['']]]]

基本上和@prpl.mnky.dshwshr文件,但简化了:

>>> s = ('abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|'
...      'abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,'
...      'abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!')
>>> 
>>> def func(s, *args):
...     return [func(s, *args[1:]) for s in s.split(args[0])] if args else s
... 
>>> import pprint
>>> 
>>> pprint.pprint(func(s, ',', '|', '!', 'b'))
[[[['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['']]]]

相关问题 更多 >