16 Nyttige Python One-Liner for å forenkle vanlige oppgaver

Ønsker du å skrive elegant og pytonisk kode? Her er en liste over nyttige Python one-liners for å utføre enkle oppgaver.

Hvis du er en nybegynner Python-programmerer, vil du bruke tid på å forstå grunnleggende datastrukturer som lister og strenger. Og noen operasjoner på disse datastrukturene kan oppnås gjennom konsise en-linjes kodebiter.

Som programmerer bør du prioritere lesbarhet og vedlikehold fremfor å gjøre koden kortere. Men Python er det lett å komme opp med one-liners som følger god kodingspraksis.

I denne artikkelen vil vi fokusere på one-liners for enkle liste- og strengbehandlingsoppgaver i Python.

La oss komme i gang!

Generer en liste over tall

Den enkleste måten å generere en liste med tall på er å bruke funksjonen range(). Range()-funksjonen returnerer et områdeobjekt som du kan kaste inn i en liste. Bruk av range(num) vil gi sekvensen 0, 1, 2,.., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Mer om bruk av range()-funksjonen

Du kan også bruke range()-funksjonen sammen med en valgfri trinnverdi. Så område (start, slutt, trinn) vil gi sekvensen start, start + trinn, start + 2*trinn, og så videre. Den siste verdien vil være start + k*trinn slik at (start + k*trinn) < slutt og (start + (k+1)*trinn) > slutt.

Finn maks- og minverdiene i en liste

Du kan bruke de innebygde maks- og min-funksjonene til å beregne henholdsvis maksimums- og minimumselementene i en liste.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Merknad om flere tildelinger

  14 Azure-øvelsestester for å hjelpe deg med å bestå den virkelige eksamen

Legg merke til at vi har tildelt verdier til både min_elt og max_elt i en enkelt tildelingssetning. Python støtter slike flere tildelinger. Og dette kan være nyttig når du pakker ut iterables og tildeler verdier til flere variabler samtidig.

Fjern duplikater fra en liste

En annen vanlig operasjon er å fjerne duplikater fra Python-lister. Dette er nødvendig når du skal jobbe med kun de unike verdiene. Den enkleste måten å gjøre det på er å konvertere listen til et sett.

Et sett er en innebygd datastruktur hvis elementer alle er unike og hashbare.

>>> nums1 = [2,4,7,9,7,10]

I nums1 forekommer element 7 to ganger. Hvis du kaster det inn i et sett, fjernes duplikatet (her 7) og etterlater oss en liste over unike verdier.

Fordi vi fortsatt må jobbe med listen, konverterer vi settet tilbake til en liste. Denne operasjonen kan utføres med følgende kodelinje:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 For å lære mer om andre teknikker for å fjerne duplikater fra Python-lister, sjekk ut denne veiledningen.

Tell forekomster i en liste

For å telle antall ganger et element forekommer i en liste, kan du bruke den innebygde count()-metoden. list.count(elt) returnerer antall ganger elt forekommer i listen.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Her forekommer 7 én gang i nums-listen, så count()-metoden returnerer 1.

>>> nums.count(7)
1

Sjekk om alle elementer i listen tilfredsstiller en betingelse

For å sjekke om alle elementene i en liste tilfredsstiller en betingelse, kan du bruke Pythons innebygde all() funksjon.

All()-funksjonen tar inn en iterabel som argument og returnerer True hvis alle elementene i den iterable evalueres til True (eller er sanne).

Her vil vi sjekke om alle elementene i nums2-listen er oddetall.

>>> nums2 = [3,4,7,11,21,67,12]

Vi kan bruke listeforståelse til å konstruere en liste over boolske og vi kan sende inn den listen som argumentet til all()-funksjonen.

Her vil num%2!=0 være False for elementene 4 og 12 som er partall. Derfor inneholder listen over boolere konstruert ved hjelp av listeforståelsesuttrykk False (og all(list) returnerer False).

>>> all([num%2!=0 for num in nums2])
False

💡 Det er viktig å merke seg at alle([]) (alle(any-empty-iterable) returnerer True.

Sjekk om et element i listen tilfredsstiller en betingelse

For å sjekke om et element i en liste tilfredsstiller en betingelse, kan du bruke funksjonen any(). any(some-list) returnerer True hvis minst ett element evalueres til True.

>>> nums2 = [3,4,7,11,21,67,12]

Som med forrige eksempel, bruker vi listeforståelse for å få en liste over boolere. Talllisten inneholder partall. Så any()-funksjonen returnerer True.

>>> any([num%2 for num in nums2])
True

Snu en streng

I Python er strenger uforanderlige, så når du vil reversere en streng, kan du bare få en reversert kopi av strengen. Det er to vanlige tilnærminger – som begge kan skrives som Python one-liners – som bruker strengslicing og innebygde funksjoner.

  Forstå Java vs JavaScript

Bruke strengskjæring

String slicing med negative verdier av trinn returnerer en del av strengen fra slutten. Syntaksen er streng[start:stop:step]. Så hva returnerer det å sette trinn på -1 og ignorere start- og stoppindeksene?

Den returnerer en kopi av strengen, fra slutten av strengen – inkludert hvert tegn.

>>> str1[::-1]
'olleh'

Bruke reversed() funksjonen

Den innebygde reversed()-funksjonen returnerer en revers iterator over en sekvens.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Du kan bruke den sammen med join()-metoden, som vist:

>>> ''.join(reversed(str1))
'olleh'

Konverter en streng til en liste med tegn

Anta at vi ønsker å dele en streng til en liste med tegn. Vi kan gjøre det ved å bruke listeforståelsesuttrykk.

>>> str1 = 'hello'

Listeforståelser er en av de kraftigste one-liners i Python.

📒 Lær mer om listeforståelse i Python.

Vi går gjennom strengen og samler hver karakter.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

For å dele en lengre streng i en liste med strenger ved hver forekomst av mellomrom, kan du bruke split()-metoden.

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Vi har allerede sett hvordan du bruker listeforståelse for å dele en streng i en liste med tegn. I det eksemplet samlet vi alle tegnene ved å gå gjennom strengen.

Her må vi gå gjennom strengen og samle bare sifrene. Så hvordan gjør vi det?

  • Vi kan angi filtreringsbetingelsen i listeforståelsesuttrykket ved å bruke isdigit()-metoden.
  • c.isdigit() returnerer True hvis c er et siffer; ellers returnerer den False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Sjekk om en streng starter med en bestemt delstreng

For å sjekke om en streng starter med en bestemt delstreng, kan du bruke strengmetoden startswith(). str1.startswith(substring) returnerer True hvis str1 starter med substring. Ellers returnerer den False.

Her er et par eksempler:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Sjekk om en streng slutter med en spesifikk delstreng

Som du kanskje har gjettet, for å sjekke om en streng slutter med en gitt delstreng, kan du bruke endswith()-metoden.

>>> str5 = 'python'
>>> str5.endswith('on')
True

Vi kan like godt bruke strengmetoden i et listeforståelsesuttrykk for å få ends_with, en liste over boolere.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Slå sammen elementer fra en liste til en streng

Vi har allerede sett hvordan du deler en streng i en liste med tegn. Hvordan gjør vi den omvendte operasjonen med å slå sammen elementene i en liste til en streng?

  5 ressurser for å lære Pine Script og lage handelsvisningsindikatorer

For å gjøre dette kan du bruke strengmetoden join() med syntaksen: separator.join(some-list).

Vi vil bare kombinere elementene i listen til en enkelt streng; vi trenger ingen separator. Så vi setter separatoren til en tom streng.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Lag en Python-ordbok

Akkurat slik listeforståelser kan hjelpe oss med å konstruere nye lister fra eksisterende iterables, kan ordbokforståelser hjelpe oss med å konstruere nye ordbøker fra eksisterende iterables.

Python-ordbokforståelser er kraftige one-liners som kan hjelpe til med å lage en ordbok i farten.

Her har vi navn som er en liste over strenger.

>>> names = ['Joe','Amy','Jake','Florence']

Vi lager names_d, en ordbok som inneholder navnestrenger som nøkler og lengdene på strengene som verdi.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Betinget tilordne verdier til variabler

Noen ganger må du kanskje tilordne verdier til variabler avhengig av en spesifikk tilstand.

For eksempel kan du lese inn brukerinndata, for eksempel alderen til individet. Og avhengig av inngangsverdien kan du bestemme om de har lov til å delta på en fest eller ikke.

For å gjøre denne betingede oppgaven i Python, kan du skrive følgende one-liner ved å bruke den ternære operatoren.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Lær mer om den ternære operatoren i Python.

Generer alle permutasjoner

Permutasjon refererer til et mulig arrangement av elementer i en gruppe. Hvis det er n unike elementer i en gruppe, er det n! mulige måter å ordne dem på – og dermed n! kombinasjonsmuligheter.

La oss bruke følgende listebokstaver:

>>> letters = ['a','b','c']

Du kan bruke permutasjoner fra itertools-modulen for å generere alle mulige permutasjoner av den gitte iterable.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Som sett returnerer bruk av permutasjoner(iterable) et permutasjonsobjekt vi kan gå gjennom ved å bruke en for-løkke:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Men vi kan omskrive det som et enlinjes uttrykk ved å kaste permutasjonsobjektet til en liste:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Her er det tre unike elementer, og det er 3!=6 mulige permutasjoner.

Generer undersett av en liste

Noen ganger kan det hende du må konstruere alle mulige undersett av en bestemt størrelse fra en liste eller andre iterables. La oss bruke bokstavlisten og få alle underlister i størrelse 2.

For å gjøre det kan vi bruke kombinasjoner fra itertools-modulen, slik:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Konklusjon

I denne opplæringen så vi på nyttige Python one-liners for å utføre vanlige operasjoner på lister og strenger. Vi lærte også one-liners som Python-liste og ordbokforståelse og hvordan du bruker dem sammen med innebygde funksjoner for å utføre de ønskede oppgavene.

Som et neste trinn, sjekk ut denne listen over nybegynnervennlige Python-prosjekter.