2016-11-07 55 views
-1

空格和整数我有一个元组以这种格式去除元组

[' 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但是,我的情况有点不同。

任何帮助将不胜感激。

+2

这是一个列表。 –

+2

将列表分配给变量(输出)或任何其他内容并运行此命令。 'output = [x.strip()for x in output]' 这将清理空间。 – Ashan

+3

期望的结果是什么? '['1','2',...]或'['1','2',...]或'[1,2,...]'或...? –

回答

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()] 
+0

为什么不在'[item.strip()for lst ...]''? –

+0

你也可以注意到'isdigit()'不适用于'float'和负'int' –

+0

@TimPietzcker因为'C'更快;-)你也不必在'if '也是。 – Kasramvd

0

我认为你可以做到这一点,以消除空白:

import re 

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

@Kasramvd回答已经与交易整数,如果你想处理数值(+/- ints & +/- float),你可以这样做:

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] 
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