[英]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
您的代码似乎产生了
>>> 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.