16 Nyttige Python One-Liners til at forenkle almindelige opgaver

Ønsker du at skrive elegant og pytonisk kode? Her er en liste over nyttige Python one-liners til at udføre simple opgaver.

Hvis du er en nybegynder Python-programmør, vil du bruge tid på at forstå grundlæggende datastrukturer som lister og strenge. Og nogle operationer på disse datastrukturer kan opnås gennem kortfattede en-linjes kodestykker.

Som programmør bør du prioritere læsbarhed og vedligeholdelse frem for at gøre koden kortere. Men Python er det nemt at komme med one-liners, der følger god kodningspraksis.

I denne artikel vil vi fokusere på one-liners til simple liste- og strengbehandlingsopgaver i Python.

Lad os komme igang!

Generer en liste over tal

Den enkleste måde at generere en liste med tal på er ved at bruge funktionen range(). Range()-funktionen returnerer et områdeobjekt, som du kan caste ind i en liste. Brug af range(num) vil give sekvensen 0, 1, 2,.., num-1.

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

Mere om brug af range()-funktionen

Du kan også bruge funktionen range() sammen med en valgfri trinværdi. Så rækkevidde (start, slut, trin) vil give sekvensen start, start + trin, start + 2*trin, og så videre. Den sidste værdi vil være start + k*trin, således at (start + k*trin) < slut og (start + (k+1)*trin) > slut.

Find maks. og min. værdier på en liste

Du kan bruge de indbyggede max- og min-funktioner til at beregne henholdsvis maksimum- og minimumselementerne i en liste.

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

📑 Bemærk om flere tildelinger

  3 nemme apps til at forfalske dig selv til videoer og GIF'er

Bemærk, at vi har tildelt værdier til både min_elt og max_elt i en enkelt opgavesætning. Python understøtter sådanne flere tildelinger. Og dette kan være nyttigt, når du pakker iterables ud og tildeler værdier til flere variabler på samme tid.

Fjern dubletter fra en liste

En anden almindelig operation er at fjerne dubletter fra Python-lister. Dette er nødvendigt, når du kun skal arbejde med de unikke værdier. Den nemmeste måde at gøre det på er at konvertere listen til et sæt.

Et sæt er en indbygget datastruktur, hvis elementer alle er unikke og hashbare.

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

I nums1 forekommer elementet 7 to gange. Casting det til et sæt vil fjerne duplikatet (her, 7), hvilket efterlader os med en liste over unikke værdier.

Fordi vi stadig skal arbejde med listen, konverterer vi sættet tilbage til en liste. Denne handling kan udføres med følgende kodelinje:

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

📒 For at lære mere om andre teknikker til at fjerne dubletter fra Python-lister, tjek denne vejledning.

Tæl forekomster i en liste

For at tælle antallet af gange et element forekommer på en liste, kan du bruge den indbyggede count() metode. list.count(elt) returnerer antallet af gange elt forekommer på 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

Tjek, om alle elementer på listen opfylder en betingelse

For at tjekke om alle elementer i en liste opfylder en betingelse, kan du bruge Pythons indbyggede all() funktion.

Funktionen all() tager en iterabel ind som argumentet og returnerer True, hvis alle elementerne i den iterable evalueres til True (eller er sande).

Her vil vi gerne kontrollere, om alle elementer i nums2-listen er ulige.

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

Vi kan bruge listeforståelse til at konstruere en liste over booleanere, og vi kan videregive den liste som argumentet til funktionen all().

Her vil num%2!=0 være Falsk for elementerne 4 og 12, som er lige. Derfor indeholder listen over booleanere, der er konstrueret ved hjælp af listeforståelsesudtryk, False (og alle(liste) returnerer False).

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

💡 Det er vigtigt at bemærke, at alle([]) (alle(alle-tom-iterable) returnerer True.

Tjek, om ethvert element på listen opfylder en betingelse

For at kontrollere, om et element i en liste opfylder en betingelse, kan du bruge funktionen any(). any(some-list) returnerer True, hvis mindst ét ​​element evalueres til True.

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

Som med det foregående eksempel bruger vi listeforståelse til at få en liste over booleanere. Tallisten indeholder lige tal. Så any()-funktionen returnerer True.

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

Vend en streng

I Python er strenge uforanderlige, så når du vil vende en streng, kan du kun få en omvendt kopi af strengen. Der er to almindelige tilgange – som begge kan skrives som Python one-liners – der bruger strengslicing og indbyggede funktioner.

  Sådan ser du NBA-slutspillet uden kabel

Brug af strengskæring

Stringudskæring med negative værdier af trin returnerer et udsnit af strengen fra enden. Syntaksen er streng[start:stop:step]. Så hvad returnerer det at sætte trin på -1 og ignorere start- og stopindekset?

Det returnerer en kopi af strengen, startende fra slutningen af ​​strengen – inklusive hvert tegn.

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

Brug af reversed()-funktionen

Den indbyggede reversed() funktion returnerer en omvendt iterator over en sekvens.

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

Du kan bruge det sammen med join()-metoden, som vist:

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

Konverter en streng til en liste over tegn

Antag, at vi gerne vil opdele en streng til en liste med tegn. Vi kan gøre det ved at bruge listeforståelsesudtryk.

>>> str1 = 'hello'

Listeforståelser er en af ​​de mest kraftfulde one-liners i Python.

📒 Lær mere om listeforståelser i Python.

Vi går gennem strengen og samler hver karakter.

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

For at opdele en længere streng i en liste over strenge ved hver forekomst af mellemrum, kan du bruge split()-metoden.

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

Vi har allerede set, hvordan man bruger listeforståelse til at opdele en streng i en liste med tegn. I det eksempel samlede vi alle tegnene ved at sløjfe gennem strengen.

Her skal vi sløjfe gennem strengen og kun samle cifrene. Så hvordan gør vi det?

  • Vi kan indstille filtreringsbetingelsen i listeforståelsesudtrykket ved hjælp af isdigit()-metoden.
  • c.isdigit() returnerer True, hvis c er et ciffer; ellers returnerer den Falsk.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Tjek, om en streng starter med en specifik understreng

For at kontrollere, om en streng starter med en bestemt understreng, kan du bruge strengmetoden startswith() . str1.startswith(substring) returnerer True hvis str1 starter med substring. Ellers returnerer den Falsk.

Her er et par eksempler:

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

Tjek, om en streng slutter med en specifik understreng

Som du måske har gættet, kan du bruge endswith() metoden for at kontrollere, om en streng slutter med en given understreng.

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

Vi kan lige så godt bruge strengmetoden inde i et listeforståelsesudtryk for at få ends_with, en liste over booleanere.

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

Sammenføj elementer af en liste til en streng

Vi har allerede set, hvordan man opdeler en streng i en liste med tegn. Hvordan laver vi nu den omvendte operation med at forbinde elementerne i en liste til en streng?

  Sådan rekrutterer du nye landsbyboere i "Animal Crossing: New Horizons"

For at gøre dette kan du bruge strengmetoden join() med syntaksen: separator.join(some-list).

Vi vil kun gerne kombinere elementerne i listen til en enkelt streng; vi har ikke brug for nogen separator. Så vi indstiller separatoren til en tom streng.

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

Opret en Python-ordbog

Ligesom listeforståelser kan hjælpe os med at konstruere nye lister ud fra eksisterende iterables, kan ordbogsforståelser hjælpe os med at konstruere nye ordbøger ud fra eksisterende iterables.

Python-ordbogsforståelser er kraftfulde one-liners, der kan hjælpe med at konstruere hjælpe med at skabe en ordbog i farten.

Her har vi navne, som er en liste over strenge.

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

Vi opretter names_d, en ordbog, der indeholder navnestrenge som nøgler og længderne af strengene som værdi.

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

Tildel betinget værdier til variabler

Nogle gange skal du muligvis tildele værdier til variable afhængigt af en specifik tilstand.

For eksempel kan du læse brugerinput, f.eks. personens alder. Og afhængigt af inputværdien kan du bestemme, om de må deltage i en fest eller ej.

For at udføre denne betingede tildeling i Python kan du skrive følgende one-liner ved hjælp af den ternære operator.

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

🔖 Lær mere om den ternære operator i Python.

Generer alle permutationer

Permutation refererer til et muligt arrangement af elementer i en gruppe. Hvis der er n unikke elementer i en gruppe, er der n! mulige måder at arrangere dem på – og dermed n! permutationer.

Lad os bruge følgende listebogstaver:

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

Du kan bruge permutationer fra itertools-modulet til at generere alle mulige permutationer af den givne iterable.

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

Som det ses, returnerer brug af permutationer(iterable) et permutationsobjekt, vi kan sløjfe igennem ved at bruge 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 en-linjes udtryk ved at caste permutationsobjektet 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 der tre unikke elementer, og der er 3!=6 mulige permutationer.

Generer undersæt af en liste

Nogle gange kan det være nødvendigt at konstruere alle mulige undersæt af en bestemt størrelse ud fra en liste eller andre iterables. Lad os bruge bogstavlisten og få alle underlister i størrelse 2.

For at gøre det kan vi bruge kombinationer fra itertools-modulet, som sådan:

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

Konklusion

I denne tutorial kiggede vi på nyttige Python one-liners til at udføre almindelige operationer på lister og strenge. Vi lærte også one-liners som Python-liste og ordbogsforståelser, og hvordan man bruger dem sammen med indbyggede funktioner til at udføre de ønskede opgaver.

Som et næste trin kan du tjekke denne liste over begyndervenlige Python-projekter.