logo

Python | Перетворення всіх рядків у списку на цілі числа

Взаємоперетворення між типами даних полегшується бібліотеками Python досить легко. Але проблема перетворення всього списку рядків у цілі числа досить поширена в області розробки. Давайте обговоримо кілька способів вирішення цієї проблеми.

Перетворення всіх рядків у списку на цілі числа за допомогою eval()

Функція Python eval(). аналізує аргумент виразу та оцінює його як вираз Python і запускає вираз Python (код). Якщо вираз є представленням int, Python перетворює аргумент на ціле число.



Python3








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

>

>

коментар javascript

Вихід:

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

Перетворення всіх рядків у списку на цілі числа Naive Method

Це найбільш загальний метод, який вражає будь-якого програміста під час виконання такого роду операцій. Просто переглядаючи весь список і перетворюючи кожен рядок списку на int за допомогою приведення типу.

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

>

>

Вихід:

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

Перетворення всіх рядків у списку на цілі числа за допомогою розуміння списку

Це лише свого роду копія наведеного вище методу, щойно реалізована за допомогою розуміння списку, свого роду скорочення, яке розробник завжди шукає. Це економить час і складність кодування рішення.

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

>

>

Вихід:

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

Перетворення всіх рядків у списку на цілі числа за допомогою map()

Це найбільш елегантний, пітонічний і рекомендований метод для виконання цього конкретного завдання. Ця функція створена виключно для такого роду завдань і повинна використовуватися для їх виконання.

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

>

>

Вихід:

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

Перетворення всіх рядків у списку на цілі. Список рядків зі змішаним представленням цілих чисел

Тут ми спочатку перетворимо кожен рядок на число з плаваючою точкою, а потім перетворимо його на ціле число за допомогою функції round(), інакше виникне помилка.

Python3




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

>

>

Вихід:

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

Перетворення всіх рядків у списку на цілі числа за допомогою функції ast.literal_eval() з модуля ast

Іншим підходом, який можна використати для перетворення списку рядків у список цілих чисел, є використання функції ast.literal_eval() з модуля ast. Ця функція дозволяє вам оцінювати рядок як літерал Python, що означає, що вона може аналізувати та оцінювати рядки, які містять вирази Python, такі як числа, списки, словники тощо.

Ось приклад використання ast.literal_eval() для перетворення списку рядків у список цілих чисел:

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>

>

>

Вихід

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

Часова складність використання функції ast.literal_eval() із модуля ast для перетворення списку рядків у список цілих чисел дорівнює O(n), де n — довжина списку. Це означає, що час, необхідний для виконання цього підходу, прямо пропорційний розміру списку вхідних даних.

З точки зору просторової складності, цей підхід має просторову складність O(n), оскільки він створює новий список цілих чисел такого ж розміру, як і вхідний список.

Перетворення всіх рядків у списку на цілі числа за допомогою функції numpy.array().

  1. Визначте список рядків
  2. Перетворіть список на масив numpy типу int за допомогою функції numpy.array().
  3. Перетворіть масив numpy назад на список за допомогою функція list().
  4. Роздрукуйте змінений список

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

>

>

Вихід:

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

Часова складність: часова складність цього підходу становить O(n), де n – довжина списку. Функції numpy.array() потрібно O(n) часу, щоб створити новий масив, а функції list() потрібно O(n) часу, щоб перетворити масив назад у список.

Складність простору: складність простору цього підходу становить O(n), оскільки він створює новий масив numpy типу int, який має такий самий розмір, як і список вхідних даних.

Підхід: за допомогою функції json.loads():

Алгоритм:

  1. Створіть список рядків test_list зі значеннями [‘1’, ‘4’, ‘3’, ‘6’, ‘7’]
  2. Використовуйте метод join(), щоб об’єднати рядки в test_list разом із комами, у результаті чого отримаємо рядок «1,4,3,6,7»
  3. Додайте квадратні дужки навколо отриманого рядка, у результаті чого отримаємо рядок «[1,4,3,6,7]»
    Використовуйте метод loads() із бібліотеки json, щоб проаналізувати рядок як масив JSON, у результаті чого буде створено список [1, 4, 3, 6, 7]
  4. Призначте отриманий список new_list
  5. Надрукуйте рядок Modified list is : за яким слідує рядкове представлення 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>

>

>

Вихід

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

Часова складність: O(n), де n – довжина списку test_list. Це пояснюється тим, що методу join() потрібно O(n) часу для об’єднання рядків, а методу loads() потрібно O(n) часу для аналізу результуючого рядка.

Просторова складність: O(n), оскільки отриманий список займає O(n) місця в пам'яті.

Перетворення всіх рядків у списку на цілі числа за допомогою модуля re

покроковий алгоритм підходу регулярного виразу для вилучення числових значень зі списку рядків

рядок java в логічний
  1. Визначте вхідний список рядків.
  2. Визначте шаблон регулярного виразу для відповідності числовим значенням у рядках.
  3. Ініціалізуйте порожній список для зберігання перетворених числових значень.
  4. Перебирайте кожен рядок у списку введення.
  5. Використовуйте шаблон регулярного виразу для пошуку числового значення в рядку.
  6. Якщо збіг знайдено, витягніть відповідний підрядок і перетворите його на число з плаваючою точкою.
  7. Додайте перетворене значення до списку виведених даних.
  8. Після обробки всіх рядків у вхідному списку поверніть вихідний список.

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

>

>

Вихід

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

Часова складність: Часова складність цього підходу становить O(nm), де n — кількість рядків у вхідному списку, а m — максимальна довжина будь-якого рядка в списку. Шаблон регулярного виразу потрібно застосувати до кожного рядка в списку, що займає O(m) часу в гіршому випадку. Таким чином, загальна часова складність становить O(нм).
Складність допоміжного приміщення: Складність допоміжного простору цього підходу становить O(k), де k — кількість числових значень у вхідному списку. Нам потрібно зберегти кожне перетворене числове значення у списку виводу, для чого потрібно O(k) місця. Крім того, нам потрібно зберігати об’єкт регулярного виразу, який вимагає постійного простору. Таким чином, загальна складність допоміжного простору становить O(k).