logo

Pythona | Konwersja wszystkich ciągów na liście na liczby całkowite

Biblioteki Pythona umożliwiają dość łatwą konwersję między typami danych. Jednak problem konwersji całej listy ciągów na liczby całkowite jest dość powszechny w domenie programistycznej. Omówmy kilka sposobów rozwiązania tego konkretnego problemu.

Konwersja wszystkich ciągów na liście na liczby całkowite za pomocą eval()

Funkcja eval() w Pythonie analizuje argument wyrażenia i ocenia go jako wyrażenie Pythona i uruchamia wyrażenie (kod) Pythona. Jeśli wyrażenie jest reprezentacją typu int, Python konwertuje argument na liczbę całkowitą.



Python3








lis>=> [>'1'>,>'-4'>,>'3'>,>'-6'>,>'7'>]> res>=> [>eval>(i)>for> i>in> lis]> print>(>'Modified list is: '>, res)>

>

>

zamów w przedsprzedaży przejście przez drzewo

Wyjście:

Modified list is: [1, -4, 3, -6, 7]>

Konwersja wszystkich ciągów na liście na liczby całkowite Metoda naiwna

Jest to najbardziej ogólna metoda, z którą spotyka się każdy programista podczas wykonywania tego rodzaju operacji. Wystarczy zapętlić całą listę i przekonwertować każdy ciąg listy na int za pomocą rzutowania typu.

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))>

>

>

Wyjście:

Modified list is: [1, 4, 3, 6, 7]>

Konwersja wszystkich ciągów na liście na liczby całkowite za pomocą zrozumienie listy

Jest to po prostu rodzaj repliki powyższej metody, właśnie zaimplementowanej przy użyciu rozumienia list, rodzaju skrótu, którego programista zawsze szuka. Oszczędza czas i złożoność kodowania rozwiązania.

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))>

>

>

Wyjście:

Modified list is : [1, 4, 3, 6, 7]>

Konwersja wszystkich ciągów na liście na liczby całkowite za pomocą mapa()

Jest to najbardziej elegancka, Pythoniczna i zalecana metoda wykonania tego konkretnego zadania. Ta funkcja jest przeznaczona wyłącznie do tego rodzaju zadań i należy jej używać do ich wykonywania.

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))>

>

>

Wyjście:

Modified list is : [1, 4, 3, 6, 7]>

Konwersja wszystkich ciągów na liście na liczby całkowite Lista ciągów z mieszanymi reprezentacjami całkowitymi

Tutaj najpierw przekonwertujemy każdy ciąg na liczbę zmiennoprzecinkową, a następnie przekonwertujemy go na liczbę całkowitą za pomocą funkcji round(), w przeciwnym razie zgłosi błąd.

Python3




lis>=> [>'1.1'>,>'4'>,>'3.5'>,>'6.7'>,>'7.2'>]> res>=> [>round>(>float>(i))>for> i>in> lis]> print>(>'Modified list is: '>, res)>

>

>

Wyjście:

Modified list is: [1, 4, 4, 7, 7]>

Konwersja wszystkich ciągów na liście na liczby całkowite Korzystanie z funkcji ast.literal_eval() z modułu ast

Innym podejściem, które można zastosować do konwersji listy ciągów znaków na listę liczb całkowitych, jest użycie funkcji ast.literal_eval() z modułu ast. Ta funkcja umożliwia ocenę ciągu jako literału Pythona, co oznacza, że ​​może analizować i oceniać ciągi zawierające wyrażenia Pythona, takie jak liczby, listy, słowniki itp.

Oto przykład użycia funkcji ast.literal_eval() do konwersji listy ciągów znaków na listę liczb całkowitych:

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>

>

>

Wyjście

Modified list: [1, 4, 3, 6, 7]>

Złożoność czasowa użycia funkcji ast.literal_eval() z modułu ast do konwersji listy ciągów znaków na listę liczb całkowitych wynosi O(n), gdzie n jest długością listy. Oznacza to, że czas wymagany do wykonania tego podejścia jest wprost proporcjonalny do rozmiaru listy wejściowej.

Jeśli chodzi o złożoność przestrzenną, to podejście ma złożoność przestrzenną O(n), ponieważ tworzy nową listę liczb całkowitych o tym samym rozmiarze co lista wejściowa.

Konwersja wszystkich ciągów na liście na liczby całkowite za pomocą funkcji numpy.array().

  1. Zdefiniuj listę ciągów
  2. Przekonwertuj listę na tablicę numpy typu int za pomocą funkcji numpy.array().
  3. Konwertuj tablicę numpy z powrotem na listę za pomocą funkcja list().
  4. Wydrukuj zmodyfikowaną listę

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)>

>

>

Wyjście:

Modified list is: [1, 4, 3, 6, 7]>

Złożoność czasowa: Złożoność czasowa tego podejścia wynosi O(n), gdzie n jest długością listy. Funkcja numpy.array() zajmuje O(n) czasu na utworzenie nowej tablicy, a funkcja list() zajmuje O(n) czasu na przekształcenie tablicy z powrotem w listę.

Złożoność przestrzenna: złożoność przestrzenna tego podejścia wynosi O(n), ponieważ tworzy nową tablicę numpy typu int o tym samym rozmiarze co lista wejściowa.

Podejście: Korzystanie z funkcji json.loads():

Algorytm:

  1. Utwórz listę ciągów test_list z wartościami [„1”, „4”, „3”, „6”, „7”]
  2. Użyj metody Join(), aby połączyć ciągi z listy testowej razem z przecinkami, w wyniku czego otrzymasz ciąg „1,4,3,6,7”
  3. Dodaj nawiasy kwadratowe wokół powstałego ciągu, w wyniku czego otrzymasz ciąg „[1,4,3,6,7]”
    Użyj metody loading() z biblioteki json, aby przeanalizować ciąg znaków jako tablicę JSON, w wyniku czego otrzymasz listę [1, 4, 3, 6, 7]
  4. Przypisz wynikową listę do new_list
  5. Wydrukuj ciąg Zmodyfikowana lista to :, po której następuje ciąg znaków reprezentujący nową_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>

>

>

Wyjście

Modified list is : [1, 4, 3, 6, 7]>

Złożoność czasowa: O(n), gdzie n jest długością listy_testów. Dzieje się tak, ponieważ metoda Join() potrzebuje O(n) czasu na połączenie ciągów, a metoda loading() zajmuje O(n) czasu na analizę powstałego ciągu.

Złożoność przestrzenna: O(n), ponieważ wynikowa lista zajmuje O(n) miejsca w pamięci.

Konwersja wszystkich ciągów na liście na liczby całkowite za pomocą modułu re

algorytm krok po kroku dla podejścia wyrażeń regularnych do wyodrębniania wartości liczbowych z listy ciągów

przekonwertuj ciąg na wyliczenie
  1. Zdefiniuj wejściową listę ciągów.
  2. Zdefiniuj wzorzec wyrażenia regularnego, aby dopasować wartości liczbowe w ciągach.
  3. Zainicjuj pustą listę, aby przechowywać przekonwertowane wartości liczbowe.
  4. Wykonaj iterację po każdym łańcuchu na liście wejściowej.
  5. Użyj wzorca wyrażenia regularnego, aby wyszukać wartość liczbową w ciągu.
  6. Jeśli zostanie znalezione dopasowanie, wyodrębnij dopasowany podciąg i przekonwertuj go na liczbę zmiennoprzecinkową.
  7. Dołącz przekonwertowaną wartość do listy wyjściowej.
  8. Po przetworzeniu wszystkich ciągów na liście wejściowej zwróć listę wyjściową.

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)>

>

>

Wyjście

Modified list is: [1, -4, 3, -6, 7]>

Złożoność czasowa: Złożoność czasowa tego podejścia wynosi O(nm), gdzie n to liczba ciągów na liście wejściowej, a m to maksymalna długość dowolnego ciągu na liście. Do każdego ciągu na liście należy zastosować wzorzec wyrażenia regularnego, co w najgorszym przypadku zajmuje czas O(m). Dlatego całkowita złożoność czasowa wynosi O (nm).
Złożoność przestrzeni pomocniczej: Złożoność przestrzeni pomocniczej w tym podejściu wynosi O(k), gdzie k jest liczbą wartości numerycznych na liście wejściowej. Każdą przekonwertowaną wartość liczbową musimy zapisać na liście wyjściowej, co wymaga miejsca O(k). Dodatkowo musimy przechowywać obiekt wyrażenia regularnego, który wymaga stałej przestrzeni. Dlatego ogólna złożoność przestrzeni pomocniczej wynosi O ( k ).