Kako raditi s tipom podataka popisa Python

Python dolazi s zbirkom ugrađenih tipova podataka koji čine uobičajene operacije premještanja podataka jednostavnim. Među njima je i  popis , jednostavan, ali svestran tip kolekcije. Pomoću Python popisa možete grupirati Python objekte u jednodimenzionalni red koji omogućava pristup objektima po položaju, dodavanje, uklanjanje, sortiranje i podjelu.

Osnove popisa Python

Definiranje popisa u Pythonu jednostavno je - samo upotrijebite sintaksu zagrada da biste označili stavke na popisu.

list_of_ints = [1, 2, 3]

Ni stavke na popisu ne moraju biti iste vrste. Mogu biti bilo koji Python objekt. (Ovdje pretpostavimo da  Three je funkcija.)

list_of_objects = ["Jedan", DVA, tri, {"četiri": 4}, nema)

Imajte na umu da miješanje objekata na popisu može utjecati na sortiranje popisa. Ući ćemo u ovo kasnije.

Najveći razlog korištenja popisa je pronalazak predmeta prema njihovom položaju na popisu. Da biste to učinili, koristite Pythonov indeksni zapis: broj u zagradama, počevši od 0, koji označava položaj stavke na popisu.

Za gornji primjer list_of_ints[0]donosi 1. list_of_ints[1]prinosi 2. list_of_objects[4]bi bio  None objekt.

Indeksiranje popisa Python

Ako za indeks koristite pozitivan cijeli broj, cijeli broj označava položaj stavke koju treba tražiti. Ali ako koristite  negativni  cijeli broj, tada cijeli broj označava položaj koji počinje od  kraja  popisa. Na primjer, upotreba indeksa -1zgodan je način za dohvaćanje posljednje stavke s popisa bez obzira na veličinu popisa.

list_of_ints[-1] prinosi  3list_of_objects[-1] prinosi  None.

Kao indeks možete koristiti i cjelobrojnu varijablu. Ako  x=0list_of_ints[x] daje 1 i tako dalje.

Dodavanje i uklanjanje stavki popisa Python

Python ima nekoliko načina na koje možete dodati ili ukloniti stavke s popisa.

  • .append() umetne stavku na  kraj  popisa. Na primjer, list_of_ints.append(4)pretvorio bi se  list_of_ints u popis  [1,2,3,4]. Dodaci su brzi i učinkoviti; potrebno je otprilike isto toliko vremena da se jedna stavka doda na popis bez obzira koliko je dugačka.
  • .pop() uklanja i vraća zadnju stavku s popisa. Ako bismo radili  x = list_of_ints.pop() na izvorniku  list_of_ints, x bi sadržavao vrijednost  3. ( .pop() Međutim, ne morate dodijeliti rezultate  vrijednosti, ako vam to ne treba.)  .pop()Operacije su također brze i učinkovite.
  • .insert() umetne stavku na neko proizvoljno mjesto na popisu. Na primjer,  list_of_ints.insert(0,10) pretvorio bi se  list_of_intsu [10,1,2,3]. Imajte na umu da što bliže umetate na početak popisa, to će operacija biti sporija, iako nećete vidjeti puno usporavanja ako vaš popis ne sadrži mnogo tisuća elemenata ili ako umetke radite u uskoj petlji.
  • .pop(x) uklanja stavku u indeksu  x. Tako  list_of_ints.pop(0) bismo uklonili stavku s indeksom 0. Opet, što ste bliže prednjem dijelu popisa, ova operacija može biti sporija.
  • .remove(item) uklanja stavku s popisa, ali  ne  na temelju njezinog indeksa. Umjesto toga, .remove()uklanja  prvu pojavu  objekta koji navedete, pretražujući od vrha popisa prema dolje. Jer  [3,7,7,9,8].remove(7), prvi  7 bi se uklonio, što bi rezultiralo popisom  [3,7,9,8]. I ova se operacija može usporiti za veliki popis, jer teoretski mora preći cijeli popis da bi djelovala.

Rezanje Python popisa

Popisi se mogu podijeliti na nove popise, postupak koji se naziva  rezanje . Sintaksa Pythonova kriška omogućuje vam određivanje dijela popisa koji ćete izrezati i kako manipulirati izrezbarenim dijelom.

Vidjeli ste gore kako koristiti konzolu notaciju kako bi dobili jednu stavku s popisa: my_list[2]npr. Kriške koristiti varijantu istog indeksa zapis (i nakon iste indeksiranja pravila): list_object[start:stop:step].

  • start je položaj na popisu za početak rezanja. 
  • stop je položaj na popisu na kojem prestajemo rezati. Drugim riječima,   izostavljen je taj položaj i sve nakon njega .
  • step je neobavezni pokazatelj "svaki n-ti element" za krišku. Prema zadanim postavkama to je  1, pa kriška zadržava svaki element s popisa s kojeg se reže. Postavite stepna  2, a odabrat ćete svaki drugi element itd.

Evo nekoliko primjera. Razmotrite ovaj popis:

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

popis kriški [0: 5] = [1, 2, 3, 4, 5]

(Imajte na umu da se zaustavljamo na indeksu 4, a ne na indeksu 5!)

popis kriški [0: 5: 2] = [1, 3, 5]

Ako izostavite određeni indeks kriške, Python pretpostavlja zadani. Izostavite početni indeks, a Python pretpostavlja početak popisa:

popis kriški [: 5] = [1, 2, 3, 4, 5]

Izostavite indeks zaustavljanja, a Python pretpostavlja kraj popisa:

popis kriški [4:] = [5, 6, 7, 8, 9, 0]

step Element također može biti  negativan . To nam omogućuje da napravimo kriške koji su obrnute kopije izvornika:

popis kriški [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Imajte na umu da možete rezati unazad koristeći indekse start i stop koji idu unatrag, a ne unaprijed:

popis kriški [5: 2: -1] = [6, 5, 4]

Također imajte na umu da su dijelovi popisa  kopije  izvornog popisa. Izvorni popis ostaje nepromijenjen. 

[Također na: Najbolji besplatni tečajevi znanosti o podacima tijekom karantene]

Sortiranje Python popisa

Python nudi dva načina za sortiranje popisa: Možete generirati novi, razvrstani popis od starog ili možete sortirati postojeći popis na mjestu. Te se opcije imaju različito ponašanje i različite scenarije korištenja.

Da biste stvorili novi, razvrstani popis, upotrijebite  sorted() funkciju na starom popisu:

novi_popis = sortirano (stari_popis)

Ovo će sortirati sadržaj popisa koristeći Pythonove zadane metode sortiranja. Za nizove je zadani abecedni redoslijed; za brojeve to su rastuće vrijednosti. Imajte na umu da sadržaj popisa mora biti dosljedan kako bi ovo moglo funkcionirati. Na primjer, ne možete sortirati kombinaciju cijelih brojeva i nizova, ali možete sortirati popis koji sadrži sve cijele brojeve ili sve nizove. Inače ćete dobiti  TypeError operaciju sortiranja.

Ako želite sortirati popis obrnuto, dodajte  reverse parametar:

new_list = sorted(old_list, reverse=True)

The other way to sort, in-place sorting, performs the sort operation directly on the original list. To do this, use the list’s .sort()method:

old_list.sort()

.sort() also takes reverse as a parameter, allowing you to sort in reverse.

Both sorted() and .sort() also take a key parameter. The key parameter lets you provide a function that can be used to perform a custom sorting operation. When the list is sorted, each element is passed to the key function, and the resulting value is used for sorting. For instance, if we had a mix of integers and strings, and we wanted to sort them, we could use key like this:

mixed_list = [1,"2",3,"4", None] def sort_mixed(item): try: return int(item) except: return 0 sorted_list = sorted(mixed_list, key = sort_mixed) print (sorted_list)

Note that this code wouldn’t convert each element of the list into an integer! Rather, it would use the integer value of each item as its sort value. Also note how we use a try/except block to trap any values that don’t translate cleanly into an integer, and return 0 for them by default.

Python lists are not arrays

One important thing to know about lists in Python is that they aren’t “arrays.” Other languages, like C, have one-dimensional or multi-dimensional constructions called arrays that accept values of a single type. Lists are heterogenous; they can accept objects of any type.

What’s more, there is a separate array type in Python. The Python array is designed to emulate the behavior of an array in C, and it’s meant chiefly to allow Python to work with C arrays. The array type is useful in those cases, but in almost every pure-Python case you’ll want to use lists.

When to use Python lists (and when not to)

So when are Python lists most useful? A list is best when:

  • You need to find things quickly by their position in a collection. Accessing any position in a list takes the same amount of time, so there is no performance penalty for looking up even the millionth item in a list.
  • You’re adding and removing to the collection mainly by appending to the end or removing from the end, in the manner of a stack. Again, these operations take the same amount of time regardless of the length of the list.

A Python list is less suitable when:

  • You want to find an item in a list, but you don’t know its position. You can do this with the .index() property. For instance, you could use list_of_ints.index(1) to find the index of the first occurrence of the number 1 in list_of_ints. Speed should not be not an issue if your list is only a few items long, but for lists thousands of items long, it means Python has to search the entire list. For a scenario like this, use a dictionary, where each item can be found using a key, and where the lookup time will be the same for each value.
  • You want to add or remove items from any position but the end. Each time you do this, Python must move every other item after the added or removed item. The longer the list, the greater the performance issue this becomes. Python’s deque object is a better fit if you want to add or remove objects freely from either the start or the end of the list.

How to do more with Python

  • How to package Python apps with BeeWare Briefcase
  • How to run Anaconda side by side with other Pythons
  • How to use Python dataclasses
  • Get started with async in Python
  • How to use asyncio in Python
  • 3 steps to a Python async overhaul
  • How to use PyInstaller to create Python executables
  • Cython tutorial: How to speed up Python
  • How to install Python the smart way
  • How to manage Python projects with Poetry
  • How to manage Python projects with Pipenv
  • Virtualenv i venv: Objašnjena Python virtualna okruženja
  • Python virtualenv i venv čine i ne čine
  • Objašnjeni Python navoji i potprocesi
  • Kako se koristi Python program za ispravljanje pogrešaka
  • Kako koristiti timeit za profiliranje Python koda
  • Kako koristiti cProfile za profiliranje Python koda
  • Kako pretvoriti Python u JavaScript (i natrag)