Проверить есть ли текущая строка в списке Python

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

objects:

A0001
A0001
A0002
A0002
A0002
A0002
A0002
A0004
A0004
A0006
A0006
A0006

Script:

art_sort_no = []
sort_no = 0
for obj in objects:
    art_no = obj.get('art_no').strip()
    if art_no in art_sort_no:
        art_sort_no.append(art_no)
        sort_no += 1
        print(art_no, sort_no)
    else:
        art_sort_no.clear()
        art_sort_no.append(art_no)
        print(art_no, sort_no)

Я хочу видеть что то вроде этого:

A0001 1
A0001 2
A0002 1
A0002 2
A0002 3
A0002 4
A0002 5
A0004 1 
A0004 2
A0006 1
A0006 2
A0006 3

Но получается во так:

A0001 1
A0001 2
A0002 3
A0002 4
A0002 5
A0002 6
A0002 7
A0004 8 
A0004 9
A0006 10
A0006 11
A0006 12

Ответы (1 шт):

Автор решения: Dr Proger

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

text = """A0001
A0001
A0002
A0002
A0002
A0002
A0002
A0004
A0004
A0006
A0006
A0006"""

text = text.split()

res_dict = dict()
result = ''

for i in text:
    if i in res_dict:
        res_dict[i] += 1
        result += f'{i} {res_dict[i]} \n'
    else:
        res_dict[i] = 1
        result += f'{i} {res_dict[i]} \n'

Результат:

A0001 1 
A0001 2
A0002 1
A0002 2
A0002 3
A0002 4
A0002 5
A0004 1
A0004 2
A0006 1
A0006 2
A0006 3
→ Ссылка