Python从列表中删除特定标记

时间:2017-07-23 17:40:35

标签: python list

我有这样的清单:

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

我的目标是这样:

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

如何删除列表中的“+”标记和下一个数字?

6 个答案:

答案 0 :(得分: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是可选的,但会阻止系统创建更多元素。然后我们采用第一个子列表。

答案 1 :(得分:5)

使用正则表达式删除加号和后续字符听起来是合乎逻辑的方法:

import re

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

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

答案 2 :(得分: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)

这应该足以删除' +'内容。

答案 3 :(得分:2)

做类似的事情:

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

答案 4 :(得分: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)

答案 5 :(得分: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,因为它更快。