我有这种格式的元组
[' 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但是我的情况有点不同。
非常感谢任何帮助。
答案 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