Как преобразовать список intable строк в int

В Python я хочу преобразовать список строк:

l = ['sam','1','dad','21'] 

и конвертировать целые числа в целые типы, подобные этому:

  • Получение карты () для возврата списка в Python 3.x
  • Как работает функция min / max в вложенном списке?
  • Поиск максимального значения списка в словаре
  • Преобразование массива 2d numpy в список списков
  • Получать случайный образец из списка при сохранении порядка элементов?
  • Трудность понимания лямбда-функции в сортировке
  •  t = ['sam',1,'dad',21] 

    Я пытался:

     t = [map(int, x) for x in l] 

    но показывает ошибку.

    Как я мог преобразовать все intable строки в список в int, оставив другие элементы в виде строк?

    Мой список может быть многомерным. Предпочтительным является метод, который работает для общего списка:

    l=[['aa','2'],['bb','3']]

  • Строка для отображения в Python
  • Лучший способ обработки list.index (возможно, не существует) в python?
  • Как избавиться от не-буквенно-цифровых символов в начале или конце строки
  • Как найти ближайшее простое число в массиве, другое число в этом массиве?
  • Объединение пар элементов списка - Python
  • Неподдерживаемый тип (ы) операндов для +: 'int' и 'str'
  • 5 Solutions collect form web for “Как преобразовать список intable строк в int”

    Я бы использовал пользовательскую функцию:

     def try_int(x): try: return int(x) except ValueError: return x 

    Пример:

     >>> [try_int(x) for x in ['sam', '1', 'dad', '21']] ['sam', 1, 'dad', 21] 

    Изменить. Если вам нужно применить вышеуказанное к списку списков, почему вы не преобразовали эти строки в int при построении вложенного списка?

    В любом случае, если вам нужно, это просто вопрос о том, как перебирать такой вложенный список и применять метод выше.

    Одним из способов сделать это может быть:

     >>> list_of_lists = [['aa', '2'], ['bb', '3']] >>> [[try_int(x) for x in lst] for lst in list_of_lists] [['aa', 2], ['bb', 3]] 

    Вы можете obviusly переназначить это list_of_lists :

     >>> list_of_lists = [[try_int(x) for x in lst] for lst in list_of_lists] 

    Я бы создал генератор для этого:

     def intify(lst): for i in lst: try: i = int(i) except ValueError: pass yield i lst = ['sam','1','dad','21'] intified_list = list(intify(lst)) # or if you want to modify an existing list # lst[:] = intify(lst) 

    Если вы хотите, чтобы это работало в списке списков, просто:

     new_list_of_lists = map(list, map(intify, list_of_lists)) 

    Как насчет использования карты и лямбда

     >>> map(lambda x:int(x) if x.isdigit() else x,['sam','1','dad','21']) ['sam', 1, 'dad', 21] 

    или с пониманием List

     >>> [int(x) if x.isdigit() else x for x in ['sam','1','dad','21']] ['sam', 1, 'dad', 21] >>> 

    Как упоминалось в комментарии, так как isdigit может не захватывать отрицательные числа, вот уточненное условие, чтобы обрабатывать его примечание. Строка – это число, если его буквенно-цифровое, а не алфавит 🙂

     >>> [int(x) if x.isalnum() and not x.isalpha() else x for x in ['sam','1','dad','21']] ['sam', 1, 'dad', 21] 

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

     from collections import Iterable def intify(maybeLst): try: return int(maybeLst) except: if isinstance(maybeLst, Iterable) and not isinstance(lst, str): return [intify(i) for i in maybeLst] # here we call intify itself! else: return maybeLst maybeLst = [[['sam', 2],'1'],['dad','21']] print intify(maybeLst) 

    Используйте isdigit() чтобы проверить каждый символ в строке, чтобы увидеть, является ли это цифрой.

    Пример:

     mylist = ['foo', '3', 'bar', '9'] t = [ int(item) if item.isdigit() else item for item in mylist ] print(t) 
    Python - лучший язык программирования в мире.