繁体   English   中英

如何简化此功能?

[英]How can I simplify this function?

有什么方法可以简化此功能? 具体来说,我想用更少的缩进行来重写它。

# split string (first argument) at location of separators (second argument, should be a string)
def split_string(text, separators):
    text = ' ' + text + ' '
    words = []
    word = ""
    for char in text:
        if char not in separators:
            word += char
        else:
            if word:
                words.append(word)
            word = ""
    if not words:
        words.append(text)
    return words

尝试使用re.split ,例如:

re.split('[%s]' % (separators),string)

[]创建正则表达式字符类进行拆分。

您的代码似乎产生了

>>> split_string("foo.,.bar", ".,")
[' foo']

但是你的评论说

split_string("foo.,.bar", ".,") will return ["foo", "bar"]

假设注释是什么意思,那么我将使用itertools.groupby (我讨厌使用正则表达式):

from itertools import groupby

def splitter(text, separators):
    grouped = groupby(text, lambda c: c in separators)
    return [''.join(g) for k,g in grouped if not k]

这使

>>> splitter("foo.,.bar", ".,")
['foo', 'bar']

groupby返回按术语的某些函数(在本例中为lambda c: c in separators分组的连续术语上的迭代器。

您应该使用split()方法。 取自官方文件:

str.split([sep [,maxsplit]])

使用sep作为分隔符字符串,返回字符串中单词的列表。 如果指定了maxsplit,则最多完成maxsplit个分割(因此,列表最多包含maxsplit + 1个元素)。 如果未指定maxsplit或-1,则分割数没有限制(进行所有可能的分割)。

如果给定sep,则不将连续的定界符分组在一起,而是将其视为定界空字符串(例如'1,,2'.split(',')返回['1','','2'])。 sep参数可以包含多个字符(例如,'1 <> 2 <> 3'.split('<>')返回['1','2','3'])。 使用指定的分隔符分割空字符串将返回['']。

如果未指定sep或为None,则将应用不同的拆分算法:连续的空白行将被视为单个分隔符,并且如果字符串的开头或结尾处有空格,则结果在开头或结尾将不包含空字符串。 因此,使用None分隔符拆分空字符串或仅包含空格的字符串将返回[]。

例如,'1 2 3'.split()返回['1','2','3'],'1 2 3'.split(None,1)返回['1','2 3' ]。

你可以做:

myString = "Some-text-here"
splitWords = myString.split("-")

上面的代码将返回一个列表,其中包含单词。 我使用“-”作为分隔符,您可以分配任何喜欢的分隔符。 默认为“空格”定界符,如下所示:

myString = "Some text here"
splitWords = myString.split()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM