2016-11-07 79 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