Lahendatud: duplikaatide ümbernimetamine list pythonis

Duplikaatide ümbernimetamine loendis võib olla raskesti lahendatav probleem, kuna see nõuab duplikaatide tuvastamist ja seejärel otsustamist, kuidas need ümber nimetada. See võib olla eriti keeruline, kui loend sisaldab palju elemente või kui elemendid on keerukad objektid. Lisaks võib duplikaatide ümbernimetamine nõuda teie koodi muude osade muutmist, mis tuginevad elementide algsele nimele, et need korralikult töötaksid.

def rename_duplicates(lst): 
    seen = set() 
    new_lst = [] 

    for item in lst: 
        if item not in seen: 
            seen.add(item) 
            new_lst.append(item) 
        else: 
            new_item = item + '_1'   # append a suffix to make it unique  

            while new_item in seen:   # increment the suffix until it's unique  
                suffix = int(new_item.split('_')[-1]) + 1   # get the last number and add one to it  
                new_item = '{}_{}'.format('_'.join(new_item.split('_')[:-1]), suffix)

            seen.add(new_item)     # add the newly created item to the set of seen items  
            new_lst.append(new_item)     # append the newly created item to the list

    return new

_lst

# See kood määratleb funktsiooni nimega rename_duplicates, mis võtab argumendina loendi.
def rename_duplicates(lst):

# Seejärel loob see tühja komplekti nimega seen ja tühja loendi nimega new_lst.
nähtud = set()
new_lst = []

# Seejärel kordab see loendis olevaid üksusi ja kontrollib, kas need on juba nähtud üksuste hulgas.
lst üksuse jaoks:
kui üksust pole nähtud: # Kui ei ole, lisab see nähtud üksuste hulka ja lisab selle uude loendisse.
nähtud.lisa(üksus)
new_lst.append(item) # Kui on, loob see üksuse kordumatu versiooni, lisades selle nimele järelliide (nt '_1') ja kontrollib, kas see vastloodud element on juba nähtud üksuste hulgas.

else: # Kui jah, suurendab see järelliidet, kuni leiab selle üksuse nime kasutamata versiooni, ja lisab selle vastloodud üksuse nii nähtud üksuste komplekti kui ka uude loendisse, enne kui tagastab selle uue loendi täitmise lõpus.

new_item = üksus + '_1'

samas kui uus_üksus on nähtud: # suurendage järelliidet, kuni kordumatu

järelliide = int(new_item.split('_')[-1]) + 1 # hankige viimane number ja lisage sellele üks

new_item = '{}_{}'.format('_'.join(new_item.split('_')[:-1]), järelliide)

seen.add(new

Loendid Pythonis

Pythoni loendid on üks kõige sagedamini kasutatavaid andmestruktuure. Neid kasutatakse üksuste kogumi salvestamiseks, mis võivad olla mis tahes tüüpi, sealhulgas muud loendid. Loendid on muudetavad, mis tähendab, et neid saab pärast loomist muuta. Need toetavad ka selliseid toiminguid nagu indekseerimine, viilutamine ja ühendamine.

Pythonis loendi loomiseks kasutage nurksulgu ja eraldage kõik üksused komaga:

minu_loend = [1, 2, 3]

Loendi üksikutele elementidele pääsete juurde nende indeksi abil:
my_list[0] # tagastab 1
my_list[1] # tagastab 2
my_list[2] # tagastab 3

Loendi lõpust elementidele juurdepääsuks saate kasutada ka negatiivseid indekseid:

minu_loend[-1] # tagastab 3 (viimane element)

Saate loendisse üksusi lisada, kasutades meetodit append().

my_list.append(4) # lisab 4 loendi lõppu

Üksusi saate loendist eemaldada, kasutades meetodit remove() või pop().

my_list.remove(3) # eemaldab loendist 3

my_list.pop(2) # eemaldab ja tagastab loendist 2 (kolmas elemendi).

Nimetage Pythonis loendis olevad duplikaadid ümber

Duplikaatide ümbernimetamine loendis Pythonis on loendite käsitlemisel tavaline ülesanne. See hõlmab loendis dubleerivate elementide asendamist unikaalsete väärtustega. Seda saab teha funktsiooni set() abil, mis eemaldab loendist kõik dubleerivad elemendid ja tagastab uue loendi, milles on ainult unikaalsed elemendid. Funktsiooni set() saab kasutada ka duplikaatide ümbernimetamiseks, pakkudes sellele vanade väärtuste vastendamist uutele väärtustele. Näiteks kui teil on numbrite loend ja soovite asendada kõik duplikaadid vastavate ruutudega, võite kasutada järgmist koodi:

# Looge tühi sõnastik
kaardistamine = {}

# Korrake algset loendit
üksuse jaoks minu_loendis:
# Kontrollige, kas üksus on sõnastikus juba olemas
kui üksus pole kaardistuses:
# Kui ei, lisage see sõnastikku ja määrake selle ruut väärtuseks
kaardistamine[üksus] = üksus * üksus

# Looge tühi tulemuste loend
result_list = []

# Korrake uuesti algset loendit ja asendage iga element selle ruuduga sõnastikust i jaoks minu_loendis: result_list.append(mapping[i])

# Prindi tulemuse print(tulemuse_loend)

Seonduvad postitused:

Jäta kommentaar