मैं जैसे कि निम्न अजगर में नाम, की एक सूची है कहो , लेकिन मैं उन्हें हटाना नहीं चाहता हूं। इसके बजाय, प्रत्येक सूची के लिए जो इस सूची में एक से अधिक बार प्रकट होता है, मैं उस नाम पर एक प्रत्यय जोड़ना चाहता हूं, जहां प्रत्यय एन-वें समय नाम प्रकट हुआ है, जबकि सूची के क्रम को संरक्षित किया गया है। चूंकि सूची में 3 कार्ल्स हैं, इसलिए मैं उन्हें क्रमशः कार्ल_1, कार्ल_2 और कार्ल_3 के रूप में संदर्भित करना चाहता हूं। इस प्रकार तो इस मामले में वांछित आउटपुट है:लेबलिंग डुप्लिकेट
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
हालांकि इस काम का एक बहुत कुछ और है कि मुझे लगता है बहुत करना बहुत मुश्किल नहीं होना चाहिए कुछ के लिए कोड की लाइनों की एक बहुत कुछ है। क्या मैं जो करना चाहता हूं उसे पूरा करने का एक आसान तरीका है? उदाहरण के लिए, सूची समझ या इटरटोल या कुछ जैसे पैकेज जैसे कुछ का उपयोग करना?
मुझे नहीं लगता कि एक उचित एक लाइन है आर, अगर आप यही चाहते हैं। वैसे भी, अगर इनपुट '[' ऐलिस ',' ऐलिस ',' ऐलिस_1 ',' ऐलिस_2 '] है, तो आप क्या प्राप्त करने की उम्मीद करते हैं? – zvone
सैद्धांतिक रूप से उस प्रकार का इनपुट कभी नहीं होगा। यदि ऐसा होता है, तो मुझे लगता है कि मैं खराब हो जाऊंगा क्योंकि हमारी परिणामी सूची '[' ऐलिस_1 ',' ऐलिस_2 ',' ऐलिस_1 ',' ऐलिस_2 '] होगी। –
कारण मैंने पूछा क्योंकि आप संभवतः '[' ऐलिस_1 ',' ऐलिस_2 ',' ऐलिस_3 ',' ऐलिस_4 '] के परिणाम चाहते थे' (मुझे नहीं पता कि यह क्या है)। इसके लिए एक अलग एल्गोरिदम की आवश्यकता होगी। – zvone