从元组中删除空格和整数

时间:2016-11-07 07:54:58

标签: python python-3.x tuples

我有这种格式的元组

['  PID', '    1', '    2', '    3', '    5', '    7', '    8', '    9', '   10', '   11', '   12', '   13', '   14', '   15', '   16', '   17', '   18', '   19', '   20', '   21', '   22', '   23', '   24', '   25', '   26', '   27', '   28', '   29', '   66', '   67', '   68', '   71', '   72', '   73', '   74', '   75', '   76', '   77', '   78', '   79', '   80', '  143', '  144', '  145', '  146', '  147', '  149', '  278', '  285', '  292', '  295', '  299', '  356', '  368', '  382', '  383', '  385', '  387', '  389', '  393', '  395', '  397', '  402', '  404', '  542', '  556', '  591', '  630', '  633', '']

我想知道我需要做些什么才能清理元组并只获取整数。

我考虑过只执行一个执行int(value).isdigit()检查的循环但是由于元组开头的' PID'字符串而失败。我想要一个干净的所有整数列表。

我见过这个帖子:Filter a list in python get integers但是我的情况有点不同。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

它失败,因为您的项目包含空格。您可以剥离它们,然后使用str.isdigit()方法检查它们是否为数字。

In [2]: [item for item in lst if item.strip().isdigit()]
Out[2]: 
['    1',
 '    2',
 '    3',
 '    5',
 '    7',
  ...
]     

如果你想要剥离结果:

[item for item in map(str.strip, lst) if item.isdigit()]

答案 1 :(得分:0)

我认为你可以这样做来删除空格:

import re

for i in tuple:
    re.sub(" ", "", i)

答案 2 :(得分:0)

@Kasramvd回答已经处理了整数,如果你想处理数值(+/-整数和+/-浮点数),你可以这样做:

int_values = ['  PID', '    1', '    2', '    3', '    5', '    7', '    8', '    9', '   10', '   11', '   12', '   13', '   14', '   15', '   16', '   17', '   18', '   19', '   20', '   21', '   22', '   23', '   24', '   25', '   26', '   27', '   28', '   29', '   66', '   67', '   68', '   71', '   72', '   73',
              '   74', '   75', '   76', '   77', '   78', '   79', '   80', '  143', '  144', '  145', '  146', '  147', '  149', '  278', '  285', '  292', '  295', '  299', '  356', '  368', '  382', '  383', '  385', '  387', '  389', '  393', '  395', '  397', '  402', '  404', '  542', '  556', '  591', '  630', '  633', '']
generic_numbers = ['     -0.5  ', ' 1',  '-2',   '        -3']

for values in [int_values, generic_numbers]:
    print('-' * 80)
    output = []
    for v in values:
        try:
            v = float(v)
            output.append(v)
        except:
            pass
    print(output)

输出将是:

--------------------------------------------------------------------------------
[1.0, 2.0, 3.0, 5.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 66.0, 67.0, 68.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 143.0, 144.0, 145.0, 146.0, 147.0, 149.0, 278.0, 285.0, 292.0, 295.0, 299.0, 356.0, 368.0, 382.0, 383.0, 385.0, 387.0, 389.0, 393.0, 395.0, 397.0, 402.0, 404.0, 542.0, 556.0, 591.0, 630.0, 633.0]
--------------------------------------------------------------------------------
[-0.5, 1.0, -2.0, -3.0]

答案 3 :(得分:0)

这可能是最简单的方法,如果你没有做太多的编码,可能是最好的理解。我缩短了你的清单,但它适用于你的清单。

values = ['  PID', '    1', '    2', '    3', '    5', '    7', '    8', '    9', '   10', '   11']
for value in values: #runs through every value in yoour list
    value = value.replace(" ","") #replaces space with nothing, essentially deleting it
    print (value)

,输出为:

PID
1
2
3
5
7
8
9
10
11