Python | Konvertering af alle strenge i listen til heltal
Interkonvertering mellem datatyper lettes af python-biblioteker ret nemt. Men problemet med at konvertere hele listen af strenge til heltal er ret almindeligt i udviklingsdomænet. Lad os diskutere et par måder at løse dette særlige problem på.
Konvertering af alle strenge i listen til heltal ved hjælp af eval()
Python eval() funktion parse udtryksargumentet og evaluer det som et pythonudtryk og kører Python-udtryk(kode). Hvis udtrykket er en int-repræsentation, konverterer Python argumentet til et heltal.
Python3
lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> res> => [> eval> (i)> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
Produktion:
Modified list is: [1, -4, 3, -6, 7]
Konvertering af alle strenge i listen til heltal Naiv metode
Dette er den mest generiske metode, der rammer enhver programmør, mens han udfører denne form for operation. Bare løkke over hele listen og konvertere hver streng på listen til int efter 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))> |
Produktion:
Modified list is: [1, 4, 3, 6, 7]
Konvertering af alle strenge i listen til heltal vha listeforståelse
Dette er blot en slags replika af ovenstående metode, lige implementeret ved hjælp af listeforståelse, en slags stenografi, som en udvikler altid leder efter. Det sparer tid og kompleksitet ved at 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))> |
Produktion:
Modified list is : [1, 4, 3, 6, 7]
Konvertering af alle strenge i listen til heltal vha kort()
Dette er den mest elegante, pytoniske og anbefalede metode til at udføre denne særlige opgave. Denne funktion er udelukkende lavet til denne slags opgaver og bør bruges til at udfø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))> |
Produktion:
Modified list is : [1, 4, 3, 6, 7]
Konvertering af alle strenge i listen til heltal Liste over strenge med blandede heltalsrepræsentationer
Her vil vi først konvertere hver streng til en float først, og derefter vil vi konvertere den til et heltal ved at bruge round()-funktionen, ellers vil den give fejl.
Python3
lis> => [> '1.1'> ,> '4'> ,> '3.5'> ,> '6.7'> ,> '7.2'> ]> res> => [> round> (> float> (i))> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
Produktion:
Modified list is: [1, 4, 4, 7, 7]
Konvertering af alle strenge i listen til heltal ved at bruge funktionen ast.literal_eval() fra ast-modulet
En anden fremgangsmåde, der kan bruges til at konvertere en liste med strenge til en liste over heltal, er at bruge funktionen ast.literal_eval() fra ast-modulet. Denne funktion giver dig mulighed for at evaluere en streng som en Python-literal, hvilket betyder, at den kan parse og evaluere strenge, der indeholder Python-udtryk, såsom tal, lister, ordbøger osv.
Her er et eksempel på, hvordan man bruger ast.literal_eval() til at konvertere en liste med strenge til en liste med heltal:
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> |
Produktion
Modified list: [1, 4, 3, 6, 7]
Tidskompleksiteten ved at bruge funktionen ast.literal_eval() fra ast-modulet til at konvertere en liste af strenge til en liste med heltal er O(n), hvor n er længden af listen. Det betyder, at den tid, der kræves for at udføre denne fremgangsmåde, er direkte proportional med størrelsen af inputlisten.
Med hensyn til rumkompleksitet har denne tilgang en rumkompleksitet på O(n), fordi den opretter en ny liste over heltal, der har samme størrelse som inputlisten.
Konvertering af alle strenge i listen til heltal ved hjælp af numpy.array()-funktionen
- Definer en liste over strenge
- Konverter listen til et numpy-array af typen int ved hjælp af numpy.array()-funktionen
- Konverter numpy-arrayet tilbage til en liste ved hjælp af list() funktion
- Udskriv den ændrede liste
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)> |
Produktion:
Modified list is: [1, 4, 3, 6, 7]
Tidskompleksitet: Tidskompleksiteten af denne tilgang er O(n), hvor n er længden af listen. Funktionen numpy.array() tager O(n) tid at oprette et nyt array, og funktionen list() tager O(n) tid at konvertere arrayet tilbage til en liste.
Rumkompleksitet: Rumkompleksiteten af denne tilgang er O(n), fordi den skaber et nyt numpy array af typen int, der har samme størrelse som inputlisten.
Fremgangsmåde: Brug af funktionen json.loads():
Algoritme:
- Opret en liste over strenge test_list med værdierne ['1', '4', '3', '6', '7']
- Brug join()-metoden til at forbinde strengene i test_list sammen med kommaer, hvilket resulterer i strengen '1,4,3,6,7'
- Tilføj firkantede parenteser omkring den resulterende streng, hvilket resulterer i strengen '[1,4,3,6,7]'
Brug metoden loads() fra json-biblioteket til at parse strengen som et JSON-array, hvilket resulterer i listen [1, 4, 3, 6, 7] - Tildel den resulterende liste til new_list
- Udskriv strengen Ændret liste er : efterfulgt af strengrepræsentationen af 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> |
Produktion
Modified list is : [1, 4, 3, 6, 7]
Tidskompleksiteten: O(n), hvor n er længden af test_list. Dette skyldes, at join()-metoden tager O(n) tid at sammenkæde strengene, og loads()-metoden tager O(n) tid at parse den resulterende streng.
Rumkompleksiteten: O(n), da den resulterende liste optager O(n) plads i hukommelsen.
Konvertering af alle strenge i listen til heltal ved hjælp af re-modul
trin-for-trin algoritme til den regulære udtrykstilgang til at udtrække numeriske værdier fra en liste over strenge
- Definer en inputliste over strenge.
- Definer et regulært udtryksmønster for at matche numeriske værdier i strengene.
- Initialiser en tom liste for at gemme de konverterede numeriske værdier.
- Gentag over hver streng i inputlisten.
- Brug det regulære udtryksmønster til at søge efter en numerisk værdi i strengen.
- Hvis der findes et match, skal du udtrække den matchede understreng og konvertere den til en float.
- Føj den konverterede værdi til outputlisten.
- Når alle strenge i inputlisten er blevet behandlet, returneres outputlisten.
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)> |
Produktion
Modified list is: [1, -4, 3, -6, 7]
Tidskompleksitet: Tidskompleksiteten af denne tilgang er O(nm), hvor n er antallet af strenge i inputlisten, og m er den maksimale længde af enhver streng på listen. Det regulære udtryksmønster skal anvendes på hver streng i listen, hvilket tager O(m) tid i værste fald. Derfor er den samlede tidskompleksitet O(nm).
Hjælperums kompleksitet: Hjælperumskompleksiteten af denne tilgang er O(k), hvor k er antallet af numeriske værdier i inputlisten. Vi skal gemme hver konverterede numeriske værdi i outputlisten, hvilket kræver O(k) mellemrum. Derudover skal vi gemme et regulært udtryksobjekt, som kræver konstant plads. Derfor er den overordnede hjælperumskompleksitet O(k).