python list:删除子列表的最后一个字符串

时间:2014-05-16 14:58:09

标签: python list

我有这种类型的清单:

lst = [u'cat 1234', u'dog bird 5678', u'fish horse elephant 9012']

如何删除每个字符串的最后一个单词,以便:

result = ['cat', 'dog bird', 'fish horse elephant']

编辑:我添加了“u”,unicode,我不知道是否有区别 编辑2:对不起,我的眼睛很疼..

3 个答案:

答案 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']]