Как преобразовать числовую ссылку в строке в целое число в Python? - PullRequest
1 голос
/ 26 сентября 2019

У меня есть серия текстовых файлов, которые включают числовые ссылки.У меня есть слово tokenized их, и я хотел бы иметь возможность определить, где токены являются числами, и преобразовать их в целочисленный формат.

mysent = ['i','am','10','today']

Я не уверен, как поступить, учитывая неизменность строк.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

Пожалуйста, попробуйте [item if not item.isdigit() else int(item) for item in mysent]

1 голос
/ 26 сентября 2019

Если вы попытаетесь преобразовать string, который не является представлением int, в int, вы получите ValueError.

. Вы можете попытаться преобразовать все элементы вint, и поймать ValueError s:

mysent = ['i','am','10','today']

for i in mysent:
    try:
        print(int(i))
    except ValueError:
        continue

ВЫХОД:

10

Если вы хотитечтобы напрямую изменить int внутри mysent, вы можете использовать:

mysent = ['i','am','10','today']

for n, i in enumerate(mysent):
    try:
        mysent[n] = int(i)
    except ValueError:
        continue

print(mysent)

ВЫХОД:

['i', 'am', 10, 'today']

.isdigit () НЕ ТО ЖЕ КАК попробуйте / за исключением !!!!

В комментариях было указаночто .isdigit() может быть более элегантным и очевидным.Как указано в Дзэн Питона , Должен быть один - и предпочтительно только один - очевидный способ сделать это .

Из официальной документации , .isdigit() Вернуть true, если все символы в строке являются цифрами и есть хотя бы один символ, в противном случае - false.

Между тем, блок try/except ловит ValueError, поднятое путем применения int к нечисловому string.

Они могут выглядеть одинаково, но их поведение действительно отличается:

def is_int(n):
    try:
        int(n)
        return True
    except ValueError:
        return False

ПРИМЕРЫ:

Положительное целое число:

n = "42"

print(is_int(n))   --> True
print(n.isdigit()) --> True

Поплавок:

n = "3.14"

print(is_int(n))   --> False
print(n.isdigit()) --> False

Отрицательное целое число:

n = "-10"

print(is_int(n))   --> True
print(n.isdigit()) --> False

u hex:

n = "\u00B23455"

print(is_int(n))   --> False
print(n.isdigit()) --> True

Это только некоторые примеры, и, вероятно, вы уже можете сказать, какой из них лучше подходит вашим потребностям.
Открытая дискуссия о том, какой из них следует использовать, изнурительна и бесконечнаВы можете взглянуть на эту пару интересных SO QA:

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