Объединение элементов в списке Python - PullRequest
0 голосов
/ 19 января 2020

Учитывая строку, скажем s='135' и список, скажем A=['1','2','3','4','5','6','7'], как я могу отделить значения в списке, которые также находятся в 's' (a di git of s) от других элементов и объединить эти другие элементы. Выходные данные в этом примере должны быть: A=['1','2','3','4','5','67']. Другой пример: s='25' A=['1','2','3','4','5','6','7'] output: A=['1','2','34','5','67']

Есть ли способ сделать это без каких-либо операторов импорта (это так, чтобы я мог лучше понять Python и как все работает )?

Я довольно новичок в программировании, поэтому любая помощь будет признательна!

(Обратите внимание: это часть более крупной проблемы, которую я пытаюсь решить).

Ответы [ 2 ]

1 голос
/ 19 января 2020

Вы можете использовать itertools.groupby с ключом, который проверяет членство в вашем номере (преобразуется в строку). Это сгруппирует элементы в зависимости от того, находятся ли они в s. Понимание списка затем объединит группы в виде строки.

from itertools import groupby

A=['1','2','3','4','5','6','7']
s=25
# make it a string so it's easier to test for membership
s = str(s)

["".join(v) for k,v in groupby(A, key=lambda c: c in s)]
# ['1', '2', '34', '5', '67']

Редактировать: трудный путь

Вы можете l oop по списку и отслеживать из последнего увиденного значения. Это позволит вам проверить, нужно ли вам добавить новую строку в список или добавить символ к последней строке. (Все же itertools намного чище):

A=['1','2','3','4','5','6','7']
s=25
# make it a string
s = str(s)

output = []
last = None

for c in A:
    if last is None:
        output.append(c)
    elif (last in s) == (c in s):
        output[-1] = output[-1] + c
    else:
        output.append(c)
    last = c

output # ['1', '2', '34', '5', '67']
0 голосов
/ 19 января 2020

Небольшой поворот в ответе @ Марка?

Я думаю, что это дает результат.

from itertools import groupby

A=['1','2','3','4','5','6','7']
s=25
# make it a string so it's easier to test for membership
s = str(s)

print(["".join(v) for k,v in groupby(A, key=lambda c: c in s) if str(k) not in s ])
# ['1', '2', '34', '5', '67']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...