我正在尝试创建一个函数,将字符串拆分为项目,然后将这些项目进一步拆分为子项目,并连续执行此操作,直到用完参数为止。
比如我想先把下面的字符串用逗号分割,然后用行分割,再用感叹号分割,最后用字母b分割。这是四次 split 。
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")
最佳答案
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'], ['']]]]
关于python - 如何创建一个可以根据输入参数将字符串拆分任意次数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206666/