Извлекать только цифры для каждой строки из списка строк? - PullRequest
0 голосов
/ 31 декабря 2018

В настоящее время я занимаюсь веб-очисткой.Одно из моих извлечений возвращает полные идентификаторы для каждого элемента на сайте.

Похоже:

['ID: 1234', 'ID: 456', 'ID: 8899']

Я бы хотел запустить итератор, который возвращает только целые значения из каждого элемента в списке.

Как (предпочтительно):

[1234, 456, 8899]

Я видел много вопросов, касающихся извлечения целых чисел, но все они предлагали решения, возвращающие каждое число в качестве индекса в новом списке, как таковое (текущий) :

[1,2,3,4,4,5,6,8,8,9,9]

Я могу добиться этого с помощью:

testList = []
for i in list:
     id = re.findall('\d+', i)
     testList.append(id)

Но я ищу этот дополнительный шаг, чтобы получить его в предпочтительном выводе.Любое понимание списка с советом по регулярному выражению?

Кроме того, если это дубликат, ссылка будет принята с благодарностью.

Заранее спасибо.

Ответы [ 6 ]

0 голосов
/ 31 декабря 2018

Используйте регулярное выражение, чтобы найти все подходящие записи.Шаблон ниже фиксирует все совпадающие цифры в списке.Затем map преобразует каждую входную строку в захваченном списке в целое число.

>>> import re
>>> data = "['ID: 1234', 'ID: 456', 'ID: 8899']"
>>> map(lambda x: int(x), re.findall("'ID: (\d+)'", data))
[1234, 456, 8899]
>>>
0 голосов
/ 31 декабря 2018

Вы также можете использовать понимание списка при распаковке кортежей:

>>> l = ['ID: 1234', 'ID: 456', 'ID: 8899']
>>> [int(y.lstrip()) for _, y in (z.split(':') for z in l)]
[1234, 456, 8899]

, который также использует str.lstrip() для удаления пробелов слева от строки перед преобразованием в целые числа.

0 голосов
/ 31 декабря 2018
test = []
id = ['ID: 1234', 'ID: 456', 'ID: 8899']
test.append([int(x.split(':')[1]) for x in id])

print(test)
0 голосов
/ 31 декабря 2018

str.isnumeric проверяет, может ли строка интерпретироваться как число.Если вы пытаетесь получить номера независимо от позиции, вы должны использовать это.

lst = ['ID: 1234', 'ID: 456', 'ID: 8899']
nums = list(map(lambda s:int(''.join([c for c in s if c.isnumeric()])), lst))
print(nums) # [1234, 456, 8899]

Но если вы знаете, что формат всегда будет иметь ID:, то ответ битто будет лучшим.

0 голосов
/ 31 декабря 2018

Самый простой способ - разделить каждый элемент в списке, так как он разделяет 'ID:' и число с пробелом '':

lst = ['ID: 1234', 'ID: 456', 'ID: 8899']
testList = []

for ele in lst:
   id_num = ele.split()[1]
   testList.append(id_num)
0 голосов
/ 31 декабря 2018
l=['ID: 1234', 'ID: 456', 'ID: 8899']
print([int(x.split(':')[1]) for x in l])

Ouput

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