Programování

Jak pracovat s datovým typem seznamu Python

Python přichází s kolekcí vestavěných datových typů, které usnadňují běžné operace hádání dat. Mezi nimi jeseznam, jednoduchý, ale všestranný typ kolekce. Se seznamem Pythonu můžete seskupit objekty Pythonu dohromady do jednorozměrného řádku, který umožňuje přístup k objektům podle polohy, přidávání, odebírání, třídění a dělení.

Základy seznamu Pythonu

Definování seznamu v Pythonu je snadné - stačí použít syntaxi závorky k označení položek v seznamu.

list_of_ints = [1, 2, 3]

Položky v seznamu nemusí být všechny stejného typu. Může to být jakýkoli objekt Pythonu. (Tady předpokládejTři je funkce.)

list_of_objects = ["One", TWO, Three, {"Four": 4}, None]

Pamatujte, že mít smíšené objekty v seznamu může mít důsledky pro řazení seznamu. Půjdeme do toho později.

Největším důvodem pro použití seznamu je schopnost najít objekty podle jejich pozice v seznamu. K tomu použijete indexovou notaci Pythonu: číslo v závorkách začínající na 0, které označuje pozici položky v seznamu.

U výše uvedeného příkladu list_of_ints [0] výnosy 1. list_of_ints [1] výnosy 2. seznam_objektů [4] budeŽádný objekt.

Indexování seznamu Python

Pokud pro index použijete kladné celé číslo, celé číslo označuje pozici hledané položky. Ale pokud použijete azáporný integer, pak celé číslo označuje pozici počínaje odkonec seznamu. Například pomocí indexu -1 je užitečný způsob, jak uchopit poslední položku ze seznamu bez ohledu na velikost seznamu.

list_of_ints [-1] výnosy3seznam_objektů [-1] výnosyŽádný.

Jako index můžete také použít celočíselnou proměnnou. Lix = 0list_of_ints [x] výnosy 1 atd.

Přidávání a odebírání položek seznamu Pythonu

Python má několik způsobů, jak můžete přidat nebo odebrat položky ze seznamu.

  • .připojit() vloží položku nakonec seznamu. Například, list_of_ints.append (4) otočí selist_of_ints do seznamu[1,2,3,4]. Přílohy jsou rychlé a efektivní; přidání jedné položky do seznamu trvá přibližně stejně dlouho bez ohledu na to, jak dlouhý je seznam.
  • .pop () odebere a vrátí poslední položku ze seznamu. Kdybychom uteklix = list_of_ints.pop () na originálulist_of_ints, x bude obsahovat hodnotu3. (Nemusíte přiřazovat výsledky z.pop () na hodnotu, pokud ji nepotřebujete.).pop ()operace jsou také rychlé a efektivní.
  • .vložit() vloží položku na libovolné místo v seznamu. Například,list_of_ints.insert (0,10) otočí selist_of_ints do [10,1,2,3]. Upozorňujeme, že čím blíže vložíte seznam na začátek, tím pomalejší bude tato operace, i když neuvidíte příliš velké zpomalení, pokud váš seznam neobsahuje mnoho tisíc prvků nebo neprovádíte vkládání v těsné smyčce.
  • .pop (x) odstraní položku v indexuX. Taklist_of_ints.pop (0) odstranil by položku na indexu 0. Opět platí, že čím blíže jste k přední části seznamu, tím pomalejší může být tato operace.
  • .odstranit (položka) odebere položku ze seznamu, alene na základě jeho indexu. Spíše, .odstranit() odstraníprvní výskyt objektu, který určíte, prohledávejte od horní části seznamu dolů. Pro[3,7,7,9,8]. Odebrat (7), první7 by byl odstraněn, což by vedlo k seznamu[3,7,9,8]. I tato operace může u velkého seznamu zpomalit, protože teoreticky musí projít celý seznam, aby fungovala.

Řezání seznamu Pythonu

Seznamy lze rozdělit do nových seznamů, tzv. Procesukrájení. Syntaxe řezu Pythonu vám umožňuje určit, která část seznamu má být vyříznuta, a jak manipulovat s vyřezanou částí.

Výše jste viděli, jak použít notaci závorky k získání jedné položky ze seznamu: my_list [2], například. Řezy používají variantu stejného zápisu indexu (a dodržují stejná pravidla indexování): list_object [start: stop: step].

  • Start je pozice v seznamu pro spuštění řezu.
  • stop je pozice v seznamu, kde přestaneme krájet. Jinými slovy,ta pozice a všechno po ní je vynechán.
  • krok je volitelný indikátor „každého n-tého prvku“ pro řez. Ve výchozím nastavení je to1, takže řez si zachovává každý prvek ze seznamu, ze kterého je řezán. Soubor krok na2, a vyberete každý druhý prvek atd.

Zde jsou nějaké příklady. Zvažte tento seznam:

slice_list = [1,2,3,4,5,6,7,8,9,0]

slice_list [0: 5] = [1, 2, 3, 4, 5]

(Upozorňujeme, že se zastavíme na indexu 4, nikoli na indexu 5!)

slice_list [0: 5: 2] = [1, 3, 5]

Pokud vynecháte určitý index řezu, předpokládá Python výchozí nastavení. Ponechte počáteční index a Python předpokládá začátek seznamu:

slice_list [: 5] = [1, 2, 3, 4, 5]

Ponechte stop index a Python předpokládá konec seznamu:

slice_list [4:] = [5, 6, 7, 8, 9, 0]

Thekrok prvek může být takézáporný. To nám umožňuje pořizovat řezy, které jsou obrácenými kopiemi originálu:

slice_list [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Pamatujte, že můžete řezat obráceně pomocí indexů spuštění a zastavení, které se pohybují dozadu, nikoli dopředu:

slice_list [5: 2: -1] = [6, 5, 4]

Pamatujte také, že výřezy seznamů jsoukopie původního seznamu. Původní seznam zůstane nezměněn.

[Také na: Nejlepší bezplatné kurzy vědy o datech během karantény]

Třídění seznamu Pythonu

Python poskytuje dva způsoby, jak třídit seznamy: Můžete vygenerovat nový, seřazený seznam ze starého, nebo můžete třídit existující seznam na místě. Tyto možnosti mají různé chování a různé scénáře použití.

Chcete-li vytvořit nový, seřazený seznam, použijtetříděno () funkce na starém seznamu:

new_list = seřazeno (old_list)

Tím se seřadí obsah seznamu pomocí výchozích metod řazení Pythonu. U řetězců je výchozí nastavení abecední pořadí; u čísel jde o vzestupné hodnoty. Aby to fungovalo, musí být obsah seznamu konzistentní. Například nemůžete seřadit kombinaci celých čísel a řetězců, ale můžete seřadit seznam, který obsahuje všechna celá čísla nebo všechny řetězce. Jinak dostaneteTypeError v operaci třídění.

Pokud chcete seznam seřadit obráceně, předejtezvrátit parametr:

new_list = seřazeno (old_list, reverse = True)

Jiný způsob třídění,na místě třídění, provede operaci řazení přímo v původním seznamu. K tomu použijte seznam.sort ()metoda:

old_list.sort ()

.sort () také berezvrátit jako parametr, který vám umožní seřadit vzad.

Obatříděno () a.sort () také vzít aklíč parametr. The klíč parametr umožňuje poskytnout funkci, kterou lze použít k provedení vlastní operace třídění. Když je seznam seřazen, každý prvek je předán doklíč funkce a výsledná hodnota se použije pro třídění. Například kdybychom měli kombinaci celých čísel a řetězců a chtěli jsme je seřadit, mohli bychom použítklíč takhle:

mixed_list = [1, "2", 3, "4", None] def sort_mixed (položka): try: return int (položka) kromě: return 0 tříděný_list = seřazený (smíšený_seznam, klíč = seřazený_mísený) tisk (seřazený_seznam)

Upozorňujeme, že tento kód nebudekonvertovat každý prvek seznamu na celé číslo! Spíše by to používalo celé číslohodnota každé položky jako hodnotu řazení. Všimněte si také, jak používáme azkuste / kromě blokovat, aby zachytil všechny hodnoty, které se nepřevádějí čistě na celé číslo, a vrátit se0 pro ně ve výchozím nastavení.

Seznamy Pythonu nejsou pole

Jedna důležitá věc, kterou byste měli vědět o seznamech v Pythonu, je, že nejde o „pole“. Jiné jazyky, například C, mají jednorozměrné nebo vícerozměrné konstrukce nazývané pole, které přijímají hodnoty jednoho typu. Seznamy jsou heterogenní; mohou přijímat objekty jakéhokoli typu.

A co víc, tamje oddělenýpole zadejte v Pythonu. Python pole je navržen tak, aby napodoboval chování pole v jazyce C, a je určen především k tomu, aby umožnil Pythonu pracovat s poli C. Thepole typ je v těchto případech užitečný, ale téměř v každém případě čistého Pythonu budete chtít použít seznamy.

Kdy použít seznamy Pythonu (a kdy ne)

Kdy jsou tedy seznamy Pythonu nejužitečnější? Seznam je nejlepší, když:

  • Musíte najít věci rychle podle nichpozice ve sbírce. Přístup k libovolné pozici v seznamu trvá stejně dlouho, takže za vyhledání ani milionté položky v seznamu není žádný trest výkonu.
  • Přidáváte a odebíráte do sbírky hlavně připojením na konec nebo odebráním z konce, způsobem hromádky. Opět platí, že tyto operace trvají stejně dlouho bez ohledu na délku seznamu.

Seznam Pythonu je méně vhodný, když:

  • Chcete najít položku v seznamu, ale neznáte její pozici. Vyumět udělejte to s.index() vlastnictví. Můžete například použítlist_of_ints.index (1) najít index prvního výskytu čísla1 vlist_of_ints. Rychlost by neměla být problémem, pokud je váš seznam dlouhý pouze několik položek, ale u seznamů dlouhých tisíce položek to znamená, že Python musí prohledávat celý seznam. U scénáře jako je tento použijte slovník, kde lze každou položku najít pomocí klíče a kde bude čas pro každou hodnotu stejný.
  • Chcete přidat nebo odebrat položky z jakékoli pozice kromě konce. Pokaždé, když to uděláte, musí se Python pohnoutkaždá další položka popřidaná nebo odebraná položka. Čím delší je seznam, tím větší je problém s výkonem. Pythondeque objekt je vhodnější, pokud chcete volně přidávat nebo odebírat objekty ze začátku nebo na konec seznamu.

Jak udělat víc s Pythonem

  • Jak zabalit aplikace v Pythonu s Aktovkou BeeWare
  • Jak spustit Anacondu bok po boku s ostatními Pythony
  • Jak používat datové třídy Pythonu
  • Začněte s asynchronizací v Pythonu
  • Jak používat asyncio v Pythonu
  • 3 kroky k generální opravě asynchronního prostředí Pythonu
  • Jak používat PyInstaller k vytvoření spustitelných souborů Pythonu
  • Výukový program pro Cython: Jak zrychlit Python
  • Jak chytře nainstalovat Python
  • Jak spravovat projekty v Pythonu pomocí Poetry
  • Jak spravovat projekty Pythonu pomocí Pipenv
  • Virtualenv a venv: Vysvětlení virtuálních prostředí Pythonu
  • Python virtualenv a venv dělá a nedělá
  • Vysvětlení vláken a podprocesů v Pythonu
  • Jak používat debugger Pythonu
  • Jak používat timeit k profilování kódu Pythonu
  • Jak používat cProfile k profilování kódu Pythonu
  • Jak převést Python na JavaScript (a zpět)
$config[zx-auto] not found$config[zx-overlay] not found