Определить дубликаты строковых шаблонов в элементах списка и создать n новых списков для каждой уникальной группы дубликатов - python - PullRequest
0 голосов
/ 09 октября 2018

У меня есть списки, подобные этому:

[review_v001,
review_v002,
review_v003,
layerpack_review_v004,
layerpack_review_v001,
x_v001,
x_v002,
x_v003]

И мне нужно перегруппировать их в новые списки, сгруппированные по символам перед подчеркиванием, то есть [: -5], чтобы они выглядели так:

[review_v001,
review_v002,
review_v003]

[layerpack_review_v004,
layerpack_review_v001]

[x_v001,
x_v002,
x_v003]

Итак, чтобы перефразировать, мне нужно перебрать данный список, определить, какие элементы списка имеют одинаковый префикс от начала строки до номера версии (например, _v001), а затем реорганизовать этиэлементы в новых списках, где группировка основана на этом общем префиксе.

Это одна из моих попыток, которая позволяет идентифицировать и почти группировать дубликаты, за исключением того, что они не присваивают им имена правильно, когда они группируют их.

fullstringlst=
    [review_v001,
    review_v002,
    review_v003,
    layerpack_review_v004,
    layerpack_review_v001,
    x_v001,
    x_v002,
    x_v003]

prefixList = []
for s in fullstringlst:
    p = s[:-5]
    prefixList.append(p)
    sublists = []
    for item in set(prefixList):
        sublists.append([p] * prefixList.count(item))
    print sublists

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете попробовать что-то вроде этого:

fullstringlst = ['review_v001', 'review_v002', 'review_v003', 'layerpack_review_v004', 'layerpack_review_v001', 'x_v001', 'x_v002', 'x_v003']

for s1 in fullstringlst:
    similar_strs = []
    for s2 in fullstringlst:
        if s1[:-5] == s2[:-5]:
            similar_strs.append(s2)
    print(similar_strs)
...