Python | Trekk ut tall fra listen over strenger - GeeksforGeeks (2024)

Noen ganger kan vi data i mange former, og vi ønsker å utføre både konverteringer og utvinninger av visse spesifikke deler av en helhet. Et slikt problem kan være å trekke ut et tall fra en streng og utvide dette, noen ganger kan det være mer enn bare en elementstreng, men en liste over det. La oss diskutere visse måter dette kan løses på.

Metode #1: Bruke listeforståelse + split()
Dette spesielle problemet kan løses ved å bruke listeforståelsesfunksjonen for å utvide logikken til alle elementene, og splittfunksjonen utfører oppgaven med å splitte og hente ønsket målelement.

Python3

# Python3-kode for å demonstrere

# Trekke ut tall fra listen over strenger

# bruker listeforståelse + split()

# initialiseringsliste

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# skriver ut originalliste

skrive ut("Den opprinneligeliste : "+ str(test_list))

# bruker listeforståelse + split()

# Trekke ut tall fra listen over strenger

res= [int(sub.split('.')[1])til underi test_list]

# utskriftsresultat

skrive ut("Deliste etter å ha trukket ut tall: "+ str(res))

Utgang:

Den opprinnelige listen: ['Rs. 24', 'Rs. 18', 'Rs. 8', 'Rs. 21']Listen etter uttrekk av tall: [24, 18, 8, 21]

Tidskompleksitet:O(n), hvor n er lengden på den gitte testlisten
Hjelpeplass:På)

Metode #2: Bruk join() + isnumeric() + listeforståelse + map()
Denne metoden er foretrukket i tilfeller der det ikke er forhåndsdefinert at tallene vil bli ordnet på en bestemt måte, dvs. denne metoden gir fleksibiliteten til å hente nummeret fra hvilken posisjon det er mulig.

Python3

# Python3-kode for å demonstrere

# Trekke ut tall fra listen over strenger

# using join() + isnumeric() + listeforståelse + map()

# initialiseringsliste

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# skriver ut originalliste

skrive ut("Den opprinneligeliste : "+ str(test_list))

# using join() + isnumeric() + listeforståelse + map()

# Trekke ut tall fra listen over strenger

res= liste(kart(lambda under:int(''.bli med(

[hantil hani underhvis ele.isnumeric()])), test_list))

# utskriftsresultat

skrive ut("Deliste etter å ha trukket ut tall: "+ str(res))

Utgang:

Den opprinnelige listen: ['Rs. 24', 'Rs. 18', 'Rs. 8', 'Rs. 21']Listen etter uttrekk av tall: [24, 18, 8, 21]

Tidskompleksitet:O(n), hvor n er lengden på inndatalisten test_list.
Auxiliary Rom:O(n), fordi resultatlisten res har samme lengde som test_list

Metode #3: Bruk av erstatte() og int() metoder

Python3

# Python3-kode for å demonstrere

# Trekke ut tall fra listen over strenger

# initialiseringsliste

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# skriver ut originalliste

skrive ut("Den originale listen: " + str(test_list))

# Trekke ut tall fra listen over strenger

res=[]

til Jegi test_list:

Jeg=i.erstatt("Rs.""")

res.append(int(Jeg))

# utskriftsresultat

skrive ut("Listen etter å trekke ut tall: " + str(res))

Produksjon

Den opprinnelige listen: ['Rs. 24', 'Rs. 18', 'Rs. 8', 'Rs. 21']Listen etter uttrekk av tall: [24, 18, 8, 21]

Tidskompleksitet:O(n), hvor n er antall elementer i listen «test_list». Koden itererer gjennom hele listen én gang og trekker ut tallene fra hver streng.
Hjelpeplass:O(n), hvor n er antall elementer i listen «test_list». Dette er fordi en ny liste 'res' er opprettet for å lagre de utpakkede tallene, som tar O(n) plass.

Metode #4: Bruke index() og int() metoder

Python3

# Python3-kode for å demonstrere

# Trekke ut tall fra listen over strenger

# initialiseringsliste

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# skriver ut originalliste

skrive ut("Den originale listen: " + str(test_list))

# Trekke ut tall fra listen over strenger

res=[]

til Jegi test_list:

j=i.index(".")

res.append(int(i[j+1:)]))

# utskriftsresultat

skrive ut("Listen etter å trekke ut tall: " + str(res))

Produksjon

Den opprinnelige listen: ['Rs. 24', 'Rs. 18', 'Rs. 8', 'Rs. 21']Listen etter uttrekk av tall: [24, 18, 8, 21]

Tidskompleksitet: O(N)
Hjelpeområde: O(N)

Metode #5: Bruke re

Denne koden definerer en funksjon extract_numbers som tar en liste over strenger som input og returnerer en liste over heltallene som finnes i disse strengene.
Det første trinnet er å kompilere et regulært uttrykksmønster ved å bruke re-modulen. Mønsteret \d+ vil matche en hvilken som helst sekvens av ett eller flere sifre.
Deretter bruker koden en listeforståelse for å bruke findall-funksjonen på hver streng i inndatalisten. Findall-funksjonen returnerer en liste over alle delstrengene i strengen som samsvarer med det regulære uttrykksmønsteret.

Til slu*tt brukes en annen listeforståelse for å konvertere de utpakkede tallene fra strenger til heltall, og den resulterende listen returneres.

Python3

import re

def extract_numbers(lst):

"""

Trekker ut tall fra en liste med strenger ved hjelp av regulære uttrykk.

"""

# Kompiler et regulært uttrykksmønster for å matche sifre

mønster= re.kompilere(r'\d+')

# Bruk mønsteret til å trekke ut alle sifre fra hver streng i listen

uttrukket_tall= [pattern.findall(s)til si lst]

# Konverter de utpakkede tallene fra strenger til heltall

komme tilbake [int(x)til underlistei uttrukket_talltil xi underliste]

# Eksempelbruk

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

skrive ut(extract_numbers(test_list))

#Denne koden er bidratt av Edula Vinay Kumar Reddy

Produksjon

[24, 18, 8, 21]

Tidskompleksitet:O(n), hvor n er det totale antallet tegn i alle strengene i listen.
Hjelpeplass:På).

Denne metoden er mer fleksibel enn de andre tilnærmingene fordi den lar deg trekke ut hvilken som helst sekvens av sifre fra strengene, ikke bare de som vises på en fast posisjon eller er atskilt med et spesifikt tegn. Den lar deg også håndtere strenger som inneholder flere forekomster av sifre.

Metode 5: Bruk map() og filter():

Brukekart()ogfilter()funksjoner i Python for å trekke ut tallene fra strengene. Først kan vi brukekart()å brukeint()funksjon til hvert element i listen, som vil konvertere hver streng til et heltall (hvis det kan konverteres). Da kan vi brukefilter()for å fjerne eventuelle Ingen-verdier som er et resultat av å prøve å konvertere en streng som ikke inneholder et tall.

Python3

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# definer en funksjon for å trekke ut tallet fra en streng

def ekstrakt_nummer(streng):

prøve:

komme tilbake int(string.split('.')[1])

unntatt IndexError:

komme tilbake Ingen

# bruk map() for å bruke extract_num()-funksjonen på hvert element i listen

tall= kart(extract_num, test_list)

# bruk filter() for å fjerne eventuelle Ingen-verdier fra listen

res= liste(filter(lambda x: xer ikke Ingentall))

skrive ut("Listen etter å trekke ut tall: ", res)

Produksjon

Listen etter å trekke ut tall: [24, 18, 8, 21]

Tidskompleksitet:O(n), hvor n er antall elementer i inndatalisten.
Ekstra plass:O(n), da det innebærer å lage en ny liste med tall ved å bruke map() og filter().

Metode #7: Bruke regulære uttrykk og listeforståelse:

Denne metoden bruker regulære uttrykk for å matche tall etter en prikk i hver streng og trekker dem ut ved å bruke listeforståelse.

Python3

import re

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# definer et regulært uttrykksmønster for å matche tall etter en prikk

mønster= r'\.\s*(\d+)'

# bruk listeforståelse for å trekke ut tall ved å bruke regulære uttrykk

res= [int(re.findall(mønster, streng)[0])til strengi test_listhvis re.findall(mønster, streng)]

skrive ut("Listen etter uttrekk av tall: ", res)

Produksjon

Listen etter å trekke ut tall: [24, 18, 8, 21]

Tidskompleksitet:O(n) hvor n er antall elementer i listen
Ekstra plass:O(n) for den resulterende listen.

Bruker numpy:

Algoritme:

Initialiser en liste med strenger test_list.
Skriv ut den originale listen test_list.
Bruk metoden numpy.char.replace() for å fjerne 'Rs. ' fra hver streng i listen test_list.
Bruk numpy.char.strip()-metoden for å fjerne innledende og etterfølgende mellomrom fra hver streng i listen test_list.
Konverter den resulterende listen over strenger til numpy array og bruk numpy.astype()-metoden for å konvertere array-elementene til heltall.
Lagre den resulterende matrisen i en variabel kalt res.
Skriv ut den endelige listen over heltall res.

Python3

import nusset som np

# initialiseringsliste

test_list= ['Rs. 24','Rs. 18','Rs. 8','Rs. 21']

# skriver ut originalliste

skrive ut("Den originale listen: " + str(test_list))

# Bruk av metodene numpy.char.replace() og numpy.char.strip() for å trekke ut tall fra listen over strenger

# konverterer dtype av matrisen til int

res= np.char.replace(test_list,'Rs. ', '').astype(int)

# utskriftsresultat

skrive ut("Listen etter å trekke ut tall: " + str(res))

Produksjon:
Den opprinnelige listen: ['Rs. 24', 'Rs. 18', 'Rs. 8', 'Rs. 21']
Listen etter å trekke ut tall: [24 18 8 21]

Tidskompleksiteten til den gitte algoritmen er O(n), der n er lengden på inndatalisten.

Romkompleksiteten til algoritmen er O(n), der n er lengden på inndatalisten. Dette er fordi algoritmen lager en ny rekke heltall med samme lengde som inndatalisten.


Sist oppdatert :5. mai 2023

Lik artikkelen

Lagre artikkelen

Python | Trekk ut tall fra listen over strenger - GeeksforGeeks (2024)

References

Top Articles
Latest Posts
Article information

Author: Dr. Pierre Goyette

Last Updated:

Views: 6362

Rating: 5 / 5 (70 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Dr. Pierre Goyette

Birthday: 1998-01-29

Address: Apt. 611 3357 Yong Plain, West Audra, IL 70053

Phone: +5819954278378

Job: Construction Director

Hobby: Embroidery, Creative writing, Shopping, Driving, Stand-up comedy, Coffee roasting, Scrapbooking

Introduction: My name is Dr. Pierre Goyette, I am a enchanting, powerful, jolly, rich, graceful, colorful, zany person who loves writing and wants to share my knowledge and understanding with you.