Python:“Try”内部缩写为…loop

2024-04-16 05:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想将字符串列表转换为整数,但不能对所有元素都这样做。你知道吗

我知道这很管用:

a = ['2.0','3.0','4.0','5.0','Cherry']
b = []

for k in a:
    try:
        int(k)
        b.append(int(k))
    except:
        pass

print b
> [2, 3, 4, 5]

但是有没有一种更简单的方法呢?我想到了这样的事情:

b = [try int(k) for k in a]

这听起来像是一个愚蠢的问题,因为我确实有一个工作的解决方案,但我经常被显示出做同样的事情,并总是感谢这种帮助简短的方法。我使用的是python2.7

谢谢!你知道吗

编辑:对不起,我刚才也在说浮点。我刚修改了示例数据


Tags: 方法字符串in元素列表for整数pass
3条回答

如果你想把try-except压缩成一行,那么我认为答案是here,答案是^{strong>否。 我将使用regexisinstance的混合检查它捕获所有数字类型,例如float、long、int和complex-

>>>a=['2', '3', '4', '5', 'Cherry', '23.3', '-3']
>>>filter(bool,[i if isinstance(eval(i),(int, long, float, complex)) else None for i in filter(lambda x: re.findall(r'[-+]?\d+[\.]?\d*',x),a)])
>>>['2', '3', '4', '5', '23.3', '-3']

如果您只想捕获floats-

>>>filter (bool,[i if isinstance(eval(i),float) else None for i in filter(lambda x: re.findall(r'[-+]?\d+[\.]?\d*',x),a)])
>>>['23.3']

如果只想捕获int-

>>>filter (bool,[i if isinstance(eval(i),int) else None for i in filter(lambda x: re.findall(r'[-+]?\d+[\.]?\d*',x),a)])
>>>['2', '3', '4', '5', '-3']

试试这个。你知道吗

def is_number(k):
    try:
        float(k)
    except ValueError:
        return False
    return True

[int(float(k)) for k in a if is_number(k)]

列表理解中没有办法使用try/except子句,但这有助于:

a = ['2','3','4','5','Cherry']
print [int(x) for x in a if x.isdigit()]

输出:

['2', '3', '4', '5']

Update (as the question was updated):

这可能会有所帮助,但我不知道使用它有多好/准确:

a = ['2.0','3.0','4.0','5.0', '44545.45', 'Cherry']

[float(x) for x in a if x.split('.')[0].isdigit() and x.split('.')[1].isdigit()]

输出:

[2.0, 3.0, 4.0, 5.0, 44545.45]

相关问题 更多 >