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 -1
zgodan je način za dohvaćanje posljednje stavke s popisa bez obzira na veličinu popisa.
list_of_ints[-1]
prinosi 3
. list_of_objects[-1]
prinosi None
.
Kao indeks možete koristiti i cjelobrojnu varijablu. Ako x=0
, list_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 selist_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 radilix = list_of_ints.pop()
na izvornikulist_of_ints
, x bi sadržavao vrijednost3
. (.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 selist_of_ints
u[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 indeksux
. Takolist_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)
, prvi7
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 je1
, pa kriška zadržava svaki element s popisa s kojeg se reže. Postavitestep
na2
, 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 uselist_of_ints.index(1)
to find the index of the first occurrence of the number1
inlist_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)