Преобразовать список кортежей в список всех целых чисел, используемых в этом списке - PullRequest
0 голосов
/ 07 марта 2019

Python начинающий здесь.У меня есть список таких кортежей:

[(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]

и я хочу преобразовать его в

[0, 2, 4, 5, 1] ​​

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

strfp1 = re.sub('\(','',str(factor_pairs)); strfp2 = re.sub('\)','',strfp1); strfp3 = re.sub('\[','',strfp2); strfp4 = re.sub(']','',strfp3); strfp5 = re.sub(',','',strfp4); strfp6 = re.sub(' ','',strfp5)
factor_numbers = [int(i) for i in set(strfp6)]

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

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Если вы хотите использовать свой метод замены, действительно есть простой способ сделать это:

import re
factor_pairs = [(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]
s = re.sub(r'[\[\]\(\), ]', '', str(factor_pairs))
factor_numbers = [int(i) for i in set(s)]

Любой символ, указанный во внешних [], будет заменен.

0 голосов
/ 07 марта 2019

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

from itertools import chain

lst = [(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]

flst = map(lambda x: str(x), chain.from_iterable(lst))

s = set()
for x in flst:
    for i in x:
        s.add(i)

print(s)
# {'2', '1', '0', '5', '4'}

Если порядок имеет значение, используйте список:

from itertools import chain

lst = [(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]

flst = map(lambda x: str(x), chain.from_iterable(lst))

s = []
for x in flst:
    for i in x:
        if i not in s:
            s.append(i)

print(s)
# ['1', '0', '5', '2', '4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...