Удалить повторяющиеся части списка строк - PullRequest
0 голосов
/ 13 июля 2020

У меня есть список, как показано ниже:

list = ['15206', '15207', '15269', '15370', '15220', '16224']

Мне нужно удалить повторяющиеся части каждого значения на основе первого:

['15206', '07', '69', '370', '20', '6224']

Кто-нибудь знает, как я могу это сделать этот? Я использую Python.

Это фактический код:

lcod = ['15206', '15207', '15269', '15370', '15220', '16224']

poped = {} # this dict store the number of letters removed in each code

# Each iteration removes 1 letter
for i in range(10):

    for seq, cod in enumerate(lcod):
        poped[seq] = 0

        if seq >= 1:
            for seqLetter, letter in enumerate(cod):
                # the "seqLetter <= 3" means that it only can remove 3 letters of each code
                if letter == lcod[0][seqLetter-poped[seq]] and seqLetter <= 3:
                    lcod[seq] = cod[1:]
                    poped[seq] += 1

print(lcod)

возвращает ['15206', '5207', '5269', '370', '220', '224']

Ответы [ 3 ]

0 голосов
/ 13 июля 2020

Попробуйте следующее:

List = ['15206', '15207', '15269', '15370', '15220', '16224']

for i, x in enumerate(List.copy()[1:], start=1):
    num = 0
    for a, b in zip(List[0], x):
        if a == b:
            num += 1
        else:
            break
    if num >= 1:
        Run = True
        List[i] = List[i][num:]
print(List)

0 голосов
/ 13 июля 2020

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

lcod = ['15206', '15207', '15269', '15370', '15220', '16224']

patterns = {lcod[0][:i+1] for i in range(len(lcod[0]))}
new_patterns = []
for i, x in enumerate(lcod[1:]):
    for j in range(len(x)):
        if x[:j+1] not in patterns:
            new_patterns.append(x[j:])
            break
print(new_patterns)

Вывод:

['7', '69', '370', '20', '6224']

Редактировать: Только что прочитал, что вы хотите, чтобы оставалось минимум последних символов. Просто добавьте условие для этого внутри внутреннего l oop:

        if x[:j+1] not in patterns or j==len(x)-2:
            new_patterns.append(x[j:])

Вывод:

['07', '69', '370', '20', '6224']
0 голосов
/ 13 июля 2020

Попробуйте это:

list1 = ['15206', '15207', '15269', '15370', '15220', '16224']
list2 = []
for x in list1:
    count = 0
    value = ''
    for y in range(0,len(x)):
        if list1[0][y] == x[y]:
            if count == 1:
                value = value + x[y]
            elif y >= len(x)-2:
                value = value + x[y]
        else:
            value = value + x[y]
            count = 1
    list2.append(value)
list2[0] = list1[0]
print(list2)

Вывод:

['15206', '07', '69', '370', '20', '6224']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...