2014-05-16 126 views
0

的最后一个字符串我有这种类型的列表:Python列表:删除子表

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

我怎样才能删除每个字符串的最后一个字,有:

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

编辑: “已经添加的‘u’,unicode的,我不知道,如果THRE是一个差异 编辑2:很抱歉的错误,它伤害了我的眼睛..

+0

每个子列表的最后一个元素是*整个字符串* ... –

+1

这是一个非常简单的答案,只需要你遍历列表,切片串。你要求别人浪费时间来解释它是很荒谬的。 –

+0

是的,你是对的...我会重写我的问题! – Guillaume

回答

1

试着这么做

>>> [' '.join(x.split()[:-1]) for x in lst] 
['cat', 'dog bird', 'fish horse elephant'] 

但我还是不明白你为什么要list要连接的元素。看起来它给你没有任何优势(考虑你之前的问题python dictionary and list: how to convert it?)。

+0

Yeahhhh!此代码正在工作:)非常感谢!对不起,我奇怪的问题... – Guillaume

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] 
+0

我的代码存在问题:>>> >>> = [u'Fare maohi 102152859',u'Clips 102890631',u'TNT 103216774',u'Via cultura“L \'Ochju,le Mauvais oeil”101959892'] >>> [[val] [0] .rpartition('')[0]] for val in 1st] result = [[ u''],[u''],[u''],[u'']] – Guillaume

+0

@Guillaume:那是**不是**嵌套列表的列表! –

+1

@Guillaume:你为什么问一个关于不同数据结构的问题?对于该结构,答案是[val.rpartition('')for val in lst]'。 –

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']] 
+0

使用'str.rpartition()'或'str.rsplit()'意味着你不必拆分*所有*,然后重新加入。我所有的代码都会在最后一个空格中分割,并返回没有最后一个单词的部分。 –