如何编写自己的分割函数?我只是认为我应该删除空格'\t'
和'\n'
。但是由于知识不足,我不知道要回答这个问题
这是原始问题:
编写一个函数split(string),该函数返回列表中的单词列表 给定的字符串。单词可以用一个或多个空格
' '
和制表符分隔'\t'
或换行符'\n'
。还有例子:
words = split('duff_beer 4.00') # ['duff_beer', '4.00'] words = split('a b c\n') # ['a', 'b', 'c'] words = split('\tx y \n z ') # ['x', 'y', 'z']
限制:请勿使用
str.split
方法!不要使用str.strip
方法
答案 0 :(得分:4)
我认为使用正则表达式也是最好的选择。
我会尝试这样的事情:
import re
def split(string):
return re.findall('\S+',string)
这应该返回字符串中所有无空格字符的列表。
示例输出:
>>> split('duff_beer 4.00')
['duff_beer', '4.00']
>>> split('a b c\n')
['a', 'b', 'c']
>>> split('\tx y \n z ')
['x', 'y', 'z']
答案 1 :(得分:3)
关于您的问题的一些评论提供了非常有趣的想法,可以解决给定的限制问题。
但是假设您不应该使用任何python内置的split函数,这是另一种解决方案:
def split(string, delimiters=' \t\n'):
result = []
word = ''
for c in string:
if c not in delimiters:
word += c
elif word:
result.append(word)
word = ''
if word:
result.append(word)
return result
示例输出:
>>> split('duff_beer 4.00')
['duff_beer', '4.00']
>>> split('a b c\n')
['a', 'b', 'c']
>>> split('\tx y \n z ')
['x', 'y', 'z']
答案 2 :(得分:2)
这就是分配列表所能做的,已在python3.6上进行了测试
下面只是一个例子。
values = 'This is a sentence'
split_values = []
tmp = ''
for words in values:
if words == ' ':
split_values.append(tmp)
tmp = ''
else:
tmp += words
if tmp:
split_values.append(tmp)
print(split_values)
所需的输出:
$ ./splt.py
['This', 'is', 'a', 'sentence']
答案 3 :(得分:2)
您可以使用以下基本功能,就像您的教授喜欢的那样:
def split(s):
output = []
delimiters = {' ', '\t', '\n'}
delimiter_found = False
for c in s:
if c in delimiters:
delimiter_found = True
elif output:
if delimiter_found:
output.append('')
delimiter_found = False
output[-1] += c
else:
output.append(c)
return output
这样:
print(split('duff_beer 4.00'))
print(split('a b c\n'))
print(split('\tx y \n z '))
将输出:
['duff_beer', '4.00']
['a', 'b', 'c']
['x', 'y', 'z']
答案 4 :(得分:2)
一种方法是遍历每个字符,直到找到一个分隔符,从这些字符中构建一个字符串,然后将其附加到输出列表中,如下所示:
def split(input_str):
out_list = []
word = ""
for c in input_str:
if c not in ("\t\n "):
word += c
else:
out_list.append(word)
word = ""
out_list.append(word)
return out_list
a = "please\nsplit\tme now"
print(split(a))
# will print: ['please', 'split', 'me', 'now']
您可以做的另一件事是使用正则表达式:
import re
def split(input_str):
out_list = []
for m in re.finditer('\S+', input_str):
out_list.append(m.group(0))
return out_list
a = "please\nsplit\tme now"
print(split(a))
# will print: ['please', 'split', 'me', 'now']
正则表达式\S+
正在查找任何非空格字符序列,并且函数re.finditer
返回一个带有MatchObject实例的迭代器,该迭代器包含正则表达式模式的所有非重叠匹配。
答案 5 :(得分:1)
请找到我的解决方案,它不是最好的解决方案,但它可行:
def convert_list_to_string(b):
localstring=""
for i in b:
localstring+=i
return localstring
def convert_string_to_list(b):
locallist=[]
for i in b:
locallist.append(i)
return locallist
def mysplit(inputString, separator):
listFromInputString=convert_string_to_list(inputString)
part=[]
result=[]
j=0
for i in range(0, len(listFromInputString)):
if listFromInputString[i]==separator:
part=listFromInputString[j:i]
j=i+1
result.append(convert_to_string(part))
else:
pass
if j != 0:
result.append(convert_to_string(listFromInputString[j:]))
if len(result)==0:
result.append(inputString)
return result
测试:
mysplit("deesdfedefddfssd", 'd')
结果:['','ees','fe','ef','','fss','']
答案 6 :(得分:0)
您的某些解决方案非常好,但在我看来,还有比使用该功能更多的选择:
values = 'This is a sentence'
split_values = []
tmp = ''
for words in values:
if words == ' ':
split_values.append(tmp)
tmp = ''
else:
tmp += words
if tmp:
split_values.append(tmp)
print(split_values)
答案 7 :(得分:0)
a是字符串,s是模式。
a="Tapas Pall Tapas TPal TapP al Pala"
s="Tapas"
def fun(a,s):
st=""
l=len(s)
li=[]
lii=[]
for i in range(0,len(a)):
if a[i:i+l]!=s:
st=st+a[i]
elif i+l>len(a):
st=st+a[i]
else:
li.append(st)
i=i+l
st=""
li.append(st)
lii.append(li[0])
for i in li[1:]:
lii.append(i[l-1:])
return lii
print(fun(a,s))
print(a.split(s))
答案 8 :(得分:0)
处理字符串中的空格并返回空列表(如果存在)
def mysplit(strng):
#
# put your code here
#
result = []
words = ''
for char in strng:
if char != ' ':
words += char
else:
if words:
result.append(words)
words = ''
result.append(words)
for item in result:
if item == '':
result.remove(item)
return result
print(mysplit("To be or not to be, that is the question"))
print(mysplit("To be or not to be,that is the question"))
print(mysplit(" "))
print(mysplit(" abc "))
print(mysplit(""))