@IrideSharks

Как внутри list, который состоит из элементов string удалить все символы не являющимися цифрами?

Например, из списка
a = [ "['9', '8', '7', '4']", "['9', '8', '7', '5']", "['9', '8', '7', '6']"]
нужно получить a = [9874, 9875, 9876]
  • Вопрос задан
  • 2439 просмотров
Решения вопроса 2
Lerg
@Lerg
Defold, Corona, Lua, GameDev
from string import digits
digits = frozenset(digits)

a = [ "['9', '8', '7', '4']", "['9', '8', '7', '5']", "['9', '8', '7', '6']"]
b = []
for e in a:
    b.append(int(''.join(c for c in e if c in digits)))
    
print(b)
Ответ написан
adugin
@adugin Куратор тега Python
Решил поизвращаться с функциональным подходом :)
>>> a
["['9', '8', '7', '4']", "['9', '8', '7', '5']", "['9', '8', '7', '6']"]

>>> map(int, map(''.join, map(eval, a)))
[9874, 9875, 9876]

>>> reduce(lambda item, func: map(func, item), (eval, ''.join, int), a)
[9874, 9875, 9876]

>>> eval(','.join(a).translate(None,",' ").replace('][',','))
[9874, 9875, 9876]

>>> from itertools import starmap
>>> map(int, starmap(('{}'*4).format, map(eval, a)))
[9874, 9875, 9876]

>>> import re
>>> eval(re.sub("', '|['\[\]]", '', ','.join(a)))
(9874, 9875, 9876)

>>> map(lambda x: int(re.sub('[^\d]', '', x)), a)
[9874, 9875, 9876]

>>> repl = partial(re.sub, '[^\d]', '')
>>> map(lambda x: int(repl(x)), a)
[9874, 9875, 9876]

>>> reduce(lambda item, func: map(func, item), (repl, int), a)
[9874, 9875, 9876]

>>> reduce(lambda *args: map(*args[::-1]), (repl, int), a)
[9874, 9875, 9876]

>>> reduce(lambda *args: map(*args[::-1]), (eval, ''.join, int), a)
[9874, 9875, 9876]

>>> func = lambda item: int(''.join(char for char in item if char in digits))
>>> map(func, a)
[9874, 9875, 9876]

>>> from textwrap import wrap
>>> map(int, wrap(re.sub('[^\d]', '', str(a)), 4))
[9874, 9875, 9876]

>>> d = set(digits)
>>> fltr = partial(filter, d.issuperset)
>>> map(int, map(fltr, a))
[9874, 9875, 9876]

>>> map(int, re.findall('\d{4}', re.sub('[^\d]', '', str(a))))
[9874, 9875, 9876]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы