5 метода за уклањање дупликата са Питхон листа

У овом водичу ћете научити како да уклоните дупле ставке са Питхон листа.

Када радите са листама у Питхон-у, можда ћете понекад морати да радите само са јединственим ставкама на листи – уклањањем дупликата.

Постоји неколико различитих начина на које то можете учинити. У овом водичу ћемо проћи кроз пет таквих техника.

Основе Питхон листа

Почнимо нашу дискусију прегледом основа Питхон листа.

Питхон листе су променљиво. Тако да их можете модификовати на месту додавањем и уклањањем елемената са листе. Поред тога, Питхон листе су колекције елемената који нису нужно јединствени.

Дакле, како задржати само јединствене елементе и уклонити дупликате или елементе који се понављају?

Па, ово можете учинити на неколико различитих начина. Можете креирати нову листу која садржи само јединствене елементе оригиналне листе. Или можете изабрати да измените оригиналну листу на месту и уклоните дуплиране ставке.

Ово ћемо детаљно научити у овом водичу.

Методе за уклањање дупликата са Питхон листа

Узмимо пример из стварног света. Претпоставимо да сте на рођенданској забави свог пријатеља.🎊🎉

У приказаној колекцији слаткиша видите да се неки предмети понављају. Сада бисте желели да уклоните те дупликате са листе слаткиша.

Хајде да направимо листу слаткиша која садржи све ставке на слици изнад.

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

У горњој листи слаткиша, ставке ‘бомбона’ и ‘колачић’ се понављају два пута. Хајде да користимо ову листу примера да уклонимо дупле ставке.

Итерирајте преко Питхон листа да бисте уклонили дупликате

Најједноставнији метод је да направите нову листу која садржи сваку ставку тачно једном.

Прочитајте ћелију кода испод:

unique_sweets = []
for sweet in sweets:
  if sweet not in unique_sweets:
    unique_sweets.append(sweet)

print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • Иницијализујемо празну листу јединствени_слаткиши.
  • Док пролазимо кроз листу слаткиша, приступамо сваком слаткишу.
  • Ако слатко није већ присутно на листи уникуе_свеетс, додајемо га на крај листе уникуе_свеетс помоћу методе .аппенд().
  Како деактивирати ОфферУп налог

Претпоставимо да наиђете на ставку која се понавља, на пример, другу појаву ‘бомбона’ на листи слаткиша. Ово није додато на листу уникуе_свеетс јер је већ присутно: слатко није у јединственим_слаткишима процењује се на Фалсе за друго појављивање „колачића“ и „бомбона“.

Стога, у овој методи, свака ставка се појављује тачно једном на листи уникуе_свеетс—без икаквог понављања.

Користите разумевање листе за уклањање дупликата

Такође можете да користите разумевање листе за попуњавање листе уникуе_свеетс.

Желите да освежите основе разумевања листе?

▶ Погледајте водич о разумевању листе у Питхон-у.

Хајде да користимо израз за разумевање листе: [output for item in iterable if condition is True] да препишем горњу петљу сажето.

unique_sweets = []
[unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets]
print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Иако креирате нову листу, не попуњавате креирану листу вредностима. То је зато што је излаз операција .аппенд() на листу уникуе_свеетс.

Да бисте уклонили дуплиране ставке са Питхон листа, можете користити и уграђене методе листе, а ми ћемо то покрити у следећем одељку.

Користите уграђене методе листе за уклањање дупликата

Можете користити методе Питхон листе .цоунт() и .ремове() да бисте уклонили дупликате ставки.

– Са синтаксом лист.цоунт(валуе), метода .цоунт() враћа колико пута се вредност појављује у листи. Дакле, број који одговара ставкама које се понављају биће већи од 1.

– лист.ремове(валуе) уклања прво појављивање вредности са листе.

Користећи горе наведено, имамо следећи код.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  if sweets.count(sweet) > 1:
  # if True, remove the first occurrence of sweet
    sweets.remove(sweet)

print(sweets)

# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Пошто метода .ремове() уклања само прво појављивање вредности, не можете је користити за уклањање ставки које се појављују више од два пута.

  • Ако је одређена ставка дуплирана (појављује се тачно два пута), овај метод уклања прво појављивање.
  • Ако се одређена ставка понови К пута, онда након покретања горњег кода, К-1 понављања ће и даље остати.
  Како играти Спелунки на Линуку

Али генерално, када кажемо дупликати, обично мислимо на сва понављања.

Да бисте решили овај случај, можете да измените горњу петљу да бисте уклонили сва понављања осим једног. Уместо да користите услов ако за проверу броја одређене ставке, можете покренути вхиле петљу да бисте више пута уклонили дупликате све док број сваке ставке на листи не буде 1.

Листа слаткиша сада садржи 2 понављања ‘колачића’ и 3 понављања ‘бомбона’.

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

Можете користити вхиле петљу да уклоните понављања, као што је приказано у наставку. Док петља наставља да ради све док је број слатког у слаткишима већи од 1. Када остане само једно појављивање, услов свеетс.цоунт(свеет) > 1 постаје Фалсе, а петља прескаче на следећу ставку.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  while(sweets.count(sweet) > 1):
  # repeatedly remove the first occurrence of sweet until one occurrence remains.
    sweets.remove(sweet)

print(sweets)
# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Али коришћење угнежђених петљи можда није веома ефикасно, тако да бисте могли да размислите о коришћењу неке од других техника о којима се говори ако радите са великим листама.

До сада смо научили следеће:

  • Методе за уклањање дупликата са Питхон листа – креирањем нових листа – које садрже само јединствене ставке
  • Уграђене методе листе .цоунт() и .ремове() за измену листе на месту

Постоје неке Питхон уграђене структуре података које захтевају да све вредности буду јединствене — без понављања. Због тога можемо да пребацимо Питхон листу на једну од ових структура података да бисмо уклонили дупликате. А затим их поново претворите у листу. Научићемо како то да урадимо у наредним одељцима.

Пребаците Питхон листу у скуп за уклањање дупликата

Питхон скупови су колекције елемената који су сви јединствени. Према томе, број ставки присутних у скупу (дат са лен(<сет-обј>) је једнак броју присутних јединствених елемената.

Можете бацити било који Питхон итерабле у скуп користећи синтаксу: сет(итерабле).

  Преглед слушалица за виртуелну стварност ВР Схинецон

Сада, хајде да саставимо листу слаткиша у сет и испитамо резултат.

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

Из излаза у горњој ћелији кода видимо да се свака ставка појављује тачно једном, а дупликати су уклоњени.

Такође, приметите да редослед ставки није нужно исти као њихов редослед у оригиналној листи слаткиша. То је зато што, осим што је колекција јединствених елемената, Питхон скуп објекат је неуређена колекција.

Сада када смо уклонили дупликате тако што смо листу претворили у скуп, можемо је поново претворити у листу, као што је приказано испод.

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Користите ставке листе као кључеве речника за уклањање дупликата

Питхон речник је колекција парова кључ/вредност где кључеви јединствено идентификују вредности.

Можете креирати Питхон речник користећи методу .фромкеис() са синтаксом: дицт.фромкеис(кључеви, вредности). Овде су кључеви и вредности итерабле које садрже кључеве и вредности речника, респективно.

  • кеис је обавезан параметар и може бити било који Питхон итерабле који одговара кључевима речника.
  • вредности је опциони параметар. Ако не наведете вредности које се могу понављати, користи се подразумевана вредност Ноне.

Без навођења вредности, дицт.фромкеис(свеетс) враћа Питхон речник где су вредности постављене на Ништа – подразумевана вредност. Кодна ћелија у наставку објашњава ово.

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

Као иу претходном одељку, поново можемо да конвертујемо речник у листу, као што је приказано испод.

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Из горњег излаза можемо видети да су дупликати уклоњени са листе слаткиша.

Сумминг Уп👩‍🏫

Ево резимеа различитих метода које можете користити за уклањање дупликата или понављања са Питхон листа.

  • Користите метод Питхон листе .аппенд() да додате ставке које се не понављају на нову листу. Нова листа садржи сваку ставку на оригиналној листи тачно једном и уклања сва понављања. То можете урадити и помоћу разумевања листе.
  • Користите уграђене методе .цоунт() и .ремове() да бисте уклонили ставке које се појављују тачно два пута. Исто се може ставити у вхиле петљу да се уклоне сва додатна појављивања.
  • Убаците Питхон листу у скуп да бисте задржали само јединствене елементе.
  • Користите дицт.фромкеис(лист) да уклоните све дупликате са листе јер не би требало да постоје кључеви за понављање речника.

Затим погледајте Питхон пројекте за вежбање и учење. Или научите како да пронађете индекс ставке на Питхон листама. Срећно учење!