作为一个实践问题,我创建了一个拆分函数,该函数基本上与cat file | head -$N | tail -1
做同样的事情。但是,对于我的第一个测试值,似乎最后一个单词被忽略了,并且没有添加到列表中。我了解这是因为没有比较“结束”字符,所以它跳过了我的if语句,而不添加单词。
我想知道是否有人可以看一下并帮助改进代码,以便将该单词添加到if语句之外,从而不会忽略结尾单词。
str.split()
我想添加一条语句:
def split(string):
words = []
char_to_split = [' ', '\n', '\t']
word = ""
for ch in string:
if ch in char_to_split:
if word != "":
words.append(word)
word = ""
else:
word += ch
if len(words) != 0:
return words
else:
return None
if __name__ == "__main__":
print(split('duff_beer 4.00'))
print(split('a b c\n'))
print(split('\tx y \n z '))
print(split(''))
在我返回列表之前。但是,问题在于如果我有一个重复相同单词的字符串。
答案 0 :(得分:1)
您的问题是,如果在字符串的末尾没有分隔符,则单词中已有的内容不会添加到单词中。
如果单词不为空,请在单词末尾附加单词。
编辑:kindall指出仅使用一个单词就无法在字符串上运行,因此我将条件移至if len(words) != 0
def split(string):
words = []
char_to_split = [' ', '\n', '\t']
word = ""
for ch in string:
if ch in char_to_split:
if word != "":
words.append(word)
word = ""
else:
word += ch
if word: words.append(word) # add this
if len(words) != 0:
return words
else:
return None
print(split('duff_beer 4.00'))
>>> ['duff_beer', '4.00']
编辑@k
答案 1 :(得分:0)
我宁愿不做任何参数而只做split
,因为默认情况下它是None
,因此可以在' '
,'\n'
和'\t'
上拆分:
s='hello blah\t\nBlahFooBar'
print(s.split())
输出:
['hello', 'blah', 'BlahFooBar']
这甚至可以做更多事情,例如(' '
,`'\ n')等...