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 opprinnelige
liste
: "
+
str
(test_list))
# bruker listeforståelse + split()
# Trekke ut tall fra listen over strenger
res
=
[
int
(sub.split(
'.'
)[
1
])
til
under
i
test_list]
# utskriftsresultat
skrive ut
("De
liste
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 opprinnelige
liste
: "
+
str
(test_list))
# using join() + isnumeric() + listeforståelse + map()
# Trekke ut tall fra listen over strenger
res
=
liste
(
kart
(
lambda
under:
int
(''.bli med(
[han
til
han
i
under
hvis
ele.isnumeric()])), test_list))
# utskriftsresultat
skrive ut
("De
liste
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
Jeg
i
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
Jeg
i
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
s
i
lst]
# Konverter de utpakkede tallene fra strenger til heltall
komme tilbake
[
int
(x)
til
underliste
i
uttrukket_tall
til
x
i
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: x
er
ikke
Ingen
tall))
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
streng
i
test_list
hvis
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