从python中删除列表中每个元素的文本

时间:2017-11-11 16:52:23

标签: python python-3.x

我有一个包含['\t30/30','\t10/10']字符串的列表,因为我在一些名为grade的字符串的原始输入数据中使用了正则表达式。

number = re.findall(r'\t\d{1,3}\/\d{1,3}',grades)
number[:] = [item.replace('\t', '') for item in number]

如何删除列表“number”中每个元素中的\ t? 第二行给出了一个错误:

AttributeError: 'list' object has no attribute 'replace'

3 个答案:

答案 0 :(得分:2)

我实际上无法重现你的问题。确保numbers符合您的想法。它似乎是列表列表。

>>> grades = "bla bla \t23/40 foo bar bla \t12/20"
>>> number = re.findall(r'\t\d{1,3}\/\d{1,3}',grades)
>>> [item.replace("\t", "") for item in number]
['23/40', '12/20']

或者,您可以使用str.strip使其缩短一点:

>>> [item.strip() for item in number]
['23/40', '12/20']

但是,我建议在正则表达式中使用捕获组,因此\t甚至不是结果的一部分:

>>> re.findall(r'\t(\d{1,3}\/\d{1,3})',grades)
['23/40', '12/20']

或者为每个号码使用一个组,因此您不必在之后拆分它们:

>>> re.findall(r'\t(\d{1,3})\/(\d{1,3})',grades)
[('23', '40'), ('12', '20')]

答案 1 :(得分:1)

你可以试试这个:

import re
number = re.findall(r'\t\d{1,3}\/\d{1,3}',grades)
final_data = [re.findall('[^\t]+', i)[0] for i in number]

使用number = ['\t30/30','\t10/10']运行此代码时,输​​出为:

['30/30', '10/10']

答案 2 :(得分:0)

data = ['\t30/30', '\t10/10']
no_tabs = filter(lambda x: x != '\t', data)

print(*no_tabs)
30/30   10/10