ben aşağıdaki gibi python adlarının bir listesi var ki ama onları kaldırmak istemiyorum. Bunun yerine, bu listede bir defadan fazla görünen her ad için, listenin sırasını koruyarak, son ekin adın n-th olduğu, bu adaya bir son ek eklemek istiyorum. Listede 3 adet Carls bulunduğundan, bunları sırasıyla Carl_1, Carl_2 ve Carl_3 olarak değerlendirmek istiyorum. aşağıdaki gibi Yani bu durumda istenen çıktı: Ben listesi üzerinden döngü ve aşağıdaki kodu gibi bir şey ile, örneğin modifiye gerekiyorsa her isim değiştirerek bunu yapabilirsinizEtiketleme çiftleri
names = ['Alice','Bob_1','Carl_1','Dave','Bob_2','Earl','Carl_2','Frank','Carl_3']
.
def mark_duplicates(name_list):
output = []
duplicates = {}
for name in name_list:
if name_list.count(name) = 1:
output.append(name)
else:
if name in duplicates:
duplicates['name'] += 1
else:
duplicates['name'] = 1
output.append(name + "_" + str(duplicates['name']))
return output
Ancak bu bir sürü iş ve ben yapmak çok zor olmamalı şüpheli bir şey için kod satırları bir çok şey var. Ne yapmak istediğimi gerçekleştirmenin daha basit bir yolu var mı? Örneğin, liste anlama veya itertools gibi bir şey gibi bir şey mi kullanıyorsunuz?
Ben makul bir tek satır olduğunu sanmıyorum r, eğer aradığınız şey buysa. Neyse, eğer girdi "[Alice”, "Alice", "Alice_1", "Alice_2"] ise, ne elde etmeyi bekliyorsunuz? – zvone
Teorik olarak, bu tür girdi asla olmaz. Öyle görünüyorsa, sonuçta, sonuçta ortaya çıkacak olan liste '[' Alice_1 ',' Alice_2 ',' Alice_1 ',' Alice_2 '] olacaktır. –
Sormamın sebebi, belki de sonucun aranmasıdır çünkü ['Alice_1', 'Alice_2', 'Alice_3', 'Alice_4'] '(Ne için olduğunu bilmiyorum). Bu tamamen farklı bir algoritma gerektirecektir. – zvone