python - удаляет все нечисловые символы из строки внутри списка - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть этот список:

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']

Я хочу удалить все нечисловые элементы из этого списка, т.е. -

['88 5', '91 5', '86 5', '87 6', '87 6']

, и я хочу только двузначные числа, т.е.-

['88', '91', '86', '87', '87']

как я могу сделать это без изменения индекса?я попытался использовать

my_list = [elem for elem in my_list if not any(c.isalpha() for c in elem)]

, но он просто вернул мне пустой список ...

edit: regex помог мне в этом списке, но что, если список выглядит примерно так:

my_list = ['J55udy 88 5', 'anim31al 91 5', 'Mo2 86 5', 'Geno 87 6', 'exhaled 87 6']

мой список все способы меняются, но он имеет постоянный стиль: сначала имя пользователя, затем двузначное число, а затем однозначное число, проблема в том, что иногда пользователь использует цифры в своем имени, как я могу получитьтолько 2 цифры в середине, даже если список выглядит так?

    my_list = ['J558udy 88 5', 'anim31al 91 5', 'Mo52 86 5', 'Gen3o 87 6', 'exhaled 87 6']

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

Вы, вероятно, можете использовать регулярное выражение для извлечения числовых строк.

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
nums = [re.search('\d+', lst).group(0) for lst in my_list]
print(nums)

Вывод

['88', '91', '86', '87', '87']
[Finished in 0.1s]
0 голосов
/ 24 сентября 2018

Вы можете использовать следующее регулярное выражение:

import re
my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
regex = re.compile(r'\b\d\d\b')
my_list = [regex.search(i).group() for i in my_list]

my_list станет:

['88', '91', '86', '87', '87']
0 голосов
/ 24 сентября 2018

Regex действительно хорошее решение, но оно также может быть достигнуто без.Приведенное ниже решение найдет все двузначные числа в строках, даже если у вас есть несколько экземпляров, например: 'blabla 88 5 63'.

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
digits = "123456789"
new_list = []

for elt in my_list:
    for k, l in enumerate(elt):
        if l in digits and k!= len(elt)-1 and elt[k+1] in digits:
            new_str = elt[k:k+2]
            new_list.append(new_str)

. Его можно превратить в один слой:

* 1006.*
0 голосов
/ 24 сентября 2018

Использование Regex.

Пример:

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
res = []
for i in my_list:
    m = re.search(r"\b(\d{2})\b", i)
    if m:
        res.append(m.group())
print(res)

Выход:

['88', '91', '86', '87', '87']
  • \b Regex Границы.
  • \d{2} Ищет int с 2 цифрами.
...