2017-07-23 78 views
1

我有這樣的名單:Python從列表中刪除特定的標記

['8 ', '27', '90+1 ','27','90+3','47'] 

我的目標是讓這樣的:

['8', '27','90','27','90','47'] 

我怎樣才能去掉「+」標誌和列表中的下一個數字?

+0

因此,你刪除'+ 1'和'+ 3',你不*計算它? –

+0

物品可以有多個「+」或單個「+」嗎? –

+4

只需使用'.split()'。並嘗試自己一次做某件事,而不是要求其他人做這樣一件小事。 – Delgan

回答

5

您可以使用下面的表達式:

[x.split('+',1)[0] for x in data] 

隨着data原始列表:

>>> [x.split('+',1)[0] for x in data] 
['8 ', '27', '90', '27', '90', '47'] 

因此,我們使用split()將字符串轉換成字符串的列表,通過+分裂。 1是可選的,但會阻止系統創建更多元素。然後我們拿第一個子列表。使用正則表達式來去除加和以下字符

+0

謝謝您提供豐富的答案! –

5

聲音做一個合乎邏輯的方式:

import re 

l = ['8 ', '27', '90+1 ','27','90+3','47'] 

newl = [re.sub("\+.*","",x) for x in l] 
3

我將建立一個發生在一個字符串的方法,檢查其是否具有在它的「+」號和刪除它和它後面的所有內容。

像這樣:

def cleanmark(string): 
    if "+" in string: 
     return string.split('+')[0] 
    return string 

然後我會映射它原來的名單上。

a = ['8 ', '27', '90+1 ','27','90+3','47'] 
a = map(lambda x: cleanmark(x), a) 

這應該足以去除'+'內容。

+0

Python 3需要轉換爲列表。地圖不再這樣做 –

+0

也因爲你做了一個功能而刪除lambda。只要通過cleanmark –

+0

感謝您的建議,Python 3的公平點,只嘗試了代碼2.7 – modr00cka

2

做這樣的事情:

original_list = ['8 ', '27', '90+1 ','27','90+3','47'] 
list_modified = [item.split('+')[0] for item in original_list] 
1

你可以按照這個過程:

list = ['8 ', '27', '90+1 ','27','90+3','47'] 
list1 = [] 
for k in list: 
    if '+' in k: 
     list1.append(k.split('+')[0]) 
    else: 
     list1.append(k) 

print(list1) 
1

如何刪除列表中的 「+」 標誌和未來的數字?

我對這句話的解釋是你想更新當前列表而不是創建一個新列表,就像所有其他答案一樣。這樣可以避免使用兩次所需的內存,而且速度可能更快。

def remove_plus_marks(l): 
    for i in range(len(l)): 
     k = l[i].find('+') 
     if k != -1: 
      l[i] = l[i][:k] 

這裏我們編輯當前列表而不是創建一個新列表,所以我們不必爲所有項目做內存分配。我們也使用find方法代替split,因爲它更快。