2014-05-16 156 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()'意味着你不必拆分*所有*,然後重新加入。我所有的代碼都會在最後一個空格中分割,並返回沒有最後一個單詞的部分。 –