Interkonvertering mellom datatyper forenkles av python-biblioteker ganske enkelt. Men problemet med å konvertere hele listen over strenger til heltall er ganske vanlig i utviklingsdomenet. La oss diskutere noen måter å løse dette spesielle problemet på.
Konvertere alle strenger i listen til heltall ved å bruke eval()
Python eval() funksjon analyser uttrykksargumentet og evaluer det som et python-uttrykk og kjører Python-uttrykk(kode). Hvis uttrykket er en int-representasjon, konverterer Python argumentet til et heltall.
Python3
lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> res> => [> eval> (i)> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
nullpointer unntak
Produksjon:
Modified list is: [1, -4, 3, -6, 7]>
Konvertering av alle strenger i listen til heltall Naiv metode
Dette er den mest generiske metoden som rammer enhver programmerer mens han utfører denne typen operasjoner. Bare sløyfe over hele listen og konvertere hver streng i listen til int etter type casting.
Python3
test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # using loop> for> i> in> range> (> 0> ,> len> (test_list)):> > test_list[i]> => int> (test_list[i])> # Printing modified list> print> (> 'Modified list is : '> +> str> (test_list))> |
>
>
Produksjon:
Modified list is: [1, 4, 3, 6, 7]>
Konvertere alle strenger i listen til heltall ved hjelp av listeforståelse
Dette er bare en slags replika av metoden ovenfor, nettopp implementert ved hjelp av listeforståelse, en slags stenografi som en utvikler alltid ser etter. Det sparer tid og kompleksitet ved å kode en løsning.
Python3
test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # using list comprehension to> # perform conversion> test_list> => [> int> (i)> for> i> in> test_list]> > # Printing modified list> print> (> 'Modified list is : '> +> str> (test_list))> |
>
>
Produksjon:
Modified list is : [1, 4, 3, 6, 7]>
Konvertere alle strenger i listen til heltall ved hjelp av kart()
Dette er den mest elegante, pytoniske og anbefalte metoden for å utføre denne spesielle oppgaven. Denne funksjonen er utelukkende laget for denne typen oppgaver og bør brukes til å utføre dem.
Python3
test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # using map() to> # perform conversion> test_list> => list> (> map> (> int> , test_list))> # Printing modified list> print> (> 'Modified list is : '> +> str> (test_list))> |
>
>
Produksjon:
Modified list is : [1, 4, 3, 6, 7]>
Konvertere alle strenger i listen til heltall Liste over strenger med blandede heltallsrepresentasjoner
Her vil vi først konvertere hver streng til en flyte først og deretter konvertere den til et heltall ved å bruke round() funksjonen, ellers vil den gi feil.
Python3
lis> => [> '1.1'> ,> '4'> ,> '3.5'> ,> '6.7'> ,> '7.2'> ]> res> => [> round> (> float> (i))> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
Produksjon:
Modified list is: [1, 4, 4, 7, 7]>
Konvertere alle strenger i listen til heltall Bruke funksjonen ast.literal_eval() fra ast-modulen
En annen tilnærming som kan brukes til å konvertere en liste med strenger til en liste med heltall er å bruke funksjonen ast.literal_eval() fra ast-modulen. Denne funksjonen lar deg evaluere en streng som en Python-literal, noe som betyr at den kan analysere og evaluere strenger som inneholder Python-uttrykk, som tall, lister, ordbøker osv.
Her er et eksempel på hvordan du bruker ast.literal_eval() for å konvertere en liste med strenger til en liste med heltall:
Python3
import> ast> # Initialize list of strings> test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # Convert strings to integers using ast.literal_eval()> test_list> => [ast.literal_eval(s)> for> s> in> test_list]> # Print resulting list> print> (> 'Modified list:'> , test_list)> #This code is contributed by Edula Vinay Kumar Reddy> |
>
>Produksjon
Modified list: [1, 4, 3, 6, 7]>
Tidskompleksiteten ved å bruke funksjonen ast.literal_eval() fra ast-modulen for å konvertere en liste med strenger til en liste med heltall er O(n), der n er lengden på listen. Dette betyr at tiden som kreves for å utføre denne tilnærmingen er direkte proporsjonal med størrelsen på inndatalisten.
Når det gjelder romkompleksitet, har denne tilnærmingen en romkompleksitet på O(n), fordi den lager en ny liste med heltall som har samme størrelse som inndatalisten.
Konvertere alle strenger i listen til heltall Bruke numpy.array()-funksjonen
- Definer en liste over strenger
- Konverter listen til en numpy-array av typen int ved å bruke numpy.array()-funksjonen
- Konverter numpy-matrisen tilbake til en liste ved å bruke list() funksjon
- Skriv ut den endrede listen
Python3
import> numpy as np> > # Define list of strings> my_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> > # Convert list to numpy array of type int> my_array> => np.array(my_list, dtype> => int> )> > # Convert numpy array back to list> modified_list> => list> (my_array)> > # Print modified list> print> (> 'Modified list is: '> , modified_list)> |
>
>
Produksjon:
Modified list is: [1, 4, 3, 6, 7]>
Tidskompleksitet: Tidskompleksiteten til denne tilnærmingen er O(n), der n er lengden på listen. Funksjonen numpy.array() bruker O(n) tid på å lage en ny matrise, og list()-funksjonen tar O(n) tid å konvertere matrisen tilbake til en liste.
Plasskompleksitet: Romkompleksiteten til denne tilnærmingen er O(n), fordi den skaper en ny numpy matrise av typen int som har samme størrelse som inndatalisten.
Tilnærming: Bruk av json.loads()-funksjonen:
Algoritme:
- Lag en liste over strenger test_list med verdiene ['1', '4', '3', '6', '7']
- Bruk join()-metoden for å slå sammen strengene i test_list sammen med kommaer, noe som resulterer i strengen '1,4,3,6,7'
- Legg til firkantede parenteser rundt den resulterende strengen, noe som resulterer i strengen '[1,4,3,6,7]'
Bruk loads()-metoden fra json-biblioteket for å analysere strengen som en JSON-matrise, noe som resulterer i listen [1, 4, 3, 6, 7] - Tilordne den resulterende listen til new_list
- Skriv ut strengen Modifisert liste er : etterfulgt av strengrepresentasjonen av new_list
Python3
import> json> test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> new_list> => json.loads(> '['> +> ','> .join(test_list)> +> ']'> )> print> (> 'Modified list is : '> +> str> (new_list))> #This code is contributed by Vinay pinjala> |
>
>Produksjon
Modified list is : [1, 4, 3, 6, 7]>
Tidskompleksiteten: O(n), hvor n er lengden på test_list. Dette er fordi join()-metoden bruker O(n) tid på å sette sammen strengene, og loads()-metoden tar O(n) tid å analysere den resulterende strengen.
Romkompleksiteten: O(n), siden den resulterende listen tar opp O(n) plass i minnet.
Konvertering av alle strenger i listen til heltall ved hjelp av re-modul
trinn-for-trinn-algoritme for tilnærmingen til regulære uttrykk for å trekke ut numeriske verdier fra en liste med strenger
cast int til streng java
- Definer en inndataliste med strenger.
- Definer et regulært uttrykksmønster for å matche numeriske verdier i strengene.
- Initialiser en tom liste for å lagre de konverterte numeriske verdiene.
- Iterer over hver streng i inndatalisten.
- Bruk det regulære uttrykksmønsteret til å søke etter en numerisk verdi i strengen.
- Hvis et samsvar blir funnet, trekk ut den matchede delstrengen og konverter den til en flytende.
- Legg til den konverterte verdien til utdatalisten.
- Når alle strenger i inndatalisten er behandlet, returnerer du utdatalisten.
Python3
import> re> # Define the input list> lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> # Define a regular expression pattern to match numerical values> pattern> => re.> compile> (r> '-?d+(?:.d+)?'> )> # Initialize an empty list to store converted values> res> => []> # Iterate over each string in the input list> for> s> in> lis:> > # Use the pattern to search for a numerical value in the string> > match> => pattern.search(s)> > # If a match is found, extract the matched substring and convert it to a float> > if> match> is> not> None> :> > res.append(> int> (match.group()))> # Print the modified list of converted values> print> (> 'Modified list is: '> , res)> |
>
>Produksjon
Modified list is: [1, -4, 3, -6, 7]>
Tidskompleksitet: Tidskompleksiteten til denne tilnærmingen er O(nm), der n er antall strenger i inndatalisten og m er maksimal lengde på en streng i listen. Det regulære uttrykksmønsteret må brukes på hver streng i listen, noe som tar O(m) tid i verste fall. Derfor er den totale tidskompleksiteten O(nm).
Ekstra plass kompleksitet: Ekstraromskompleksiteten til denne tilnærmingen er O(k), der k er antall numeriske verdier i inndatalisten. Vi må lagre hver konverterte numeriske verdi i utdatalisten, som krever O(k) mellomrom. I tillegg må vi lagre et regulært uttrykksobjekt, som krever konstant plass. Derfor er den generelle hjelperomskompleksiteten O(k).