我有这种类型的清单:
lst = [u'cat 1234', u'dog bird 5678', u'fish horse elephant 9012']
如何删除每个字符串的最后一个单词,以便:
result = ['cat', 'dog bird', 'fish horse elephant']
编辑:我添加了“u”,unicode,我不知道是否有区别 编辑2:对不起,我的眼睛很疼..
答案 0 :(得分:5)
如果您想从每个嵌套字符串中删除最后一个字,请使用str.rpartition()
或str.rsplit()
:
result = [[val[0].rpartition(' ')[0]] for val in lst]
或
result = [[val[0].rsplit(None, 1)[0]] for val in lst]
后者可以处理以超过1个空格分隔的字符串。
演示:
>>> lst = [[u'cat 1234'], [u'dog bird 5678'], [u'fish horse elephant 9012']]
>>> [[val[0].rpartition(' ')[0]] for val in lst]
[[u'cat'], [u'dog bird'], [u'fish horse elephant']]
>>> [[val[0].rsplit(None, 1)[0]] for val in lst]
[[u'cat'], [u'dog bird'], [u'fish horse elephant']]
如果你的字符串不嵌套在列表中,那么我们就不必解包和重新包装; [0]
索引可以去,以及创建一个新的嵌套列表:
result = [val.rpartition(' ')[0] for val in lst]
或
result = [val.rsplit(None, 1)[0] for val in lst]
答案 1 :(得分:1)
尝试类似
的内容>>> [' '.join(x.split()[:-1]) for x in lst]
['cat', 'dog bird', 'fish horse elephant']
但我仍然无法理解为什么要将list
元素连接起来。看起来它没有任何优势(考虑到您之前的问题python dictionary and list: how to convert it?)。
答案 2 :(得分:0)
您可以在空白处拆分字符串,它会为您提供单词列表:
>>> s = 'fish horse elephant 9012'
>>> words = s.split()
>>> words
['fish', 'horse', 'elephant', '9012']
您可以使用切片索引列表以提供除最后一项之外的所有内容:
>>> all_but_last = words[:-1]
>>> all_but_last
['fish', 'horse', 'elephant']
然后,您可以将列表与空格分隔一起加入:
>>> ' '.join(all_but_last)
'fish horse elephant'
因此,您需要对句子列表中的每个句子执行此操作:
>>> [[' '.join(sentence.split()[:-1])] for sentence[0] in sentences]
[['cat'], ['dog bird'], ['fish horse elephant']]