вернуть список с целыми числами и строкой из списка строк - PullRequest
3 голосов
/ 14 марта 2019
['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 ]

8 голосов
/ 14 марта 2019

Это должно работать для любой строки, которая является допустимым представлением целого числа (более положительное или отрицательное).Не то, если не будет работать с поплавками.

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

result = [to_int(s) for s in your_list]
7 голосов
/ 14 марта 2019

Вы можете использовать следующее понимание списка с .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]
3 голосов
/ 14 марта 2019

Используйте этот код.Он отлично работает в случае отрицательных целых чисел, а также с плавающей точкой и т. Д.

Код:

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]
2 голосов
/ 14 марта 2019

Вы можете использовать регулярное выражение, чтобы проверить, является ли строка целым числом:

import re

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

[int(i) if p.fullmatch(i) else i for i in l]
1 голос
/ 14 марта 2019

Вы можете попробовать это:

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)

Я не уверен, что это лучший метод для этого, но это работает для всех целых чисел (положительных и отрицательных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...