从字符串列表中返回包含整数和字符串的列表

时间:2019-03-14 11:03:30

标签: python string list integer

['10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631', 'LT219796314', '2410', '25', '26', '3232', '32131']

在此列表中,每个项目都是一个字符串,我怎么能从该列表中得到相同顺序的相同列表,而不是现在是字符串的整数(如10019''121979631'等),以整数形式返回?

我的目标是使列表看起来像这样

[10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LZ219796314', 2410, 25, 26, 3232, 32131]

如果字母和数字混合在一起,则应像LZ219796314'这样的字符串形式保留下来

5 个答案:

答案 0 :(得分:8)

该字符串适用于任何有效表示整数的字符串(无论是正数还是负数)。但这并不是说不能与浮点数一起使用。

def to_int(s):
    try:
        return int(s)
    except (TypeError, ValueError) as e:
        return s

result = [to_int(s) for s in your_list]

答案 1 :(得分:7)

您可以对.isdigit使用以下列表推导,以便仅将数字字符串转换为int

l = ['10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631', 
     'LT219796314', '2410', '25', '26', '3232', '32131']

[int(i) if i.lstrip('-').isdigit() else i for i in l]
# [10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LT219796314', 
#  2410, 25, 26, 3232, 32131]

答案 2 :(得分:3)

使用此代码。在负整数以及float等情况下,它可以正常工作。

代码:

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass

    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass

    return False


l = ['10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631', 
     'LT219796314', '2410', '-25', '26', '3232', '32131']

print([int(i) if is_number(i) else i for i in l])

输出:

[10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LT219796314', 2410, -25, 26, 3232, 32131]

答案 3 :(得分:2)

您可以使用正则表达式检查字符串是否为整数:

import re

p = re.compile(r'[+-]?\d+')

[int(i) if p.fullmatch(i) else i for i in l]

答案 4 :(得分:1)

您可以尝试一下:

l=['-10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631', 'LT219796314', '2410', '25', '26', '3232', '32131']
a=[]
for item in l:
    try:
        a.append(int(item))
    except:
        a.append(item)

我不确定这是否是最好的方法,但这适用于所有整数(正数和负数)