У меня есть кортеж из запросов MySQL, как это:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
Я хотел бы преобразовать все строковые элементы в целые числа и поместить их обратно в список списков:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Я пытался добиться этого, eval
но пока не получил приличного результата.
Ответы:
int()
стандартная встроенная функция Python для преобразования строки в целочисленное значение Вы вызываете его со строкой, содержащей число в качестве аргумента, и он возвращает число, преобразованное в целое число:Вышеуказанные отпечатки
2
.Если вам известна структура вашего списка, T1 (он просто содержит списки, только один уровень), вы можете сделать это в Python 2:
В Python 3:
источник
T2 = map(lambda lol: map(int, lol), T1)
? Либо карта, либо список понимания, оба глупы;)Вы можете сделать это с пониманием списка:
Внутренний список comphetsion (
[int(column) for column in row]
) строит alist
изint
s из последовательностиint
объектов -able, таких как десятичные строки, вrow
. Внешний список со списком ([... for row in T1])
) создает список результатов внутреннего списка, примененного к каждому элементу вT1
.Фрагмент кода потерпит неудачу, если какая-либо из строк содержит объекты, которые не могут быть преобразованы
int
. Вам понадобится более умная функция, если вы хотите обрабатывать строки, содержащие недесятичные строки.Если вы знаете структуру строк, вы можете заменить понимание внутреннего списка вызовом функции строки. Например.
источник
Я бы предпочел использовать только списки понимания:
источник
Вместо того, чтобы ставить
int( )
, поставьте,float( )
который позволит вам использовать десятичные дроби вместе с целыми числами.источник
Я бы согласился с ответами на все вопросы, но проблема в том, что, если у вас нет всех целых чисел, они вылетят.
Если вы хотите исключить нецелые числа, то
Это дает только фактические цифры. Причина, по которой я не использую прямое понимание списка, состоит в том, что понимание списка пропускает их внутренние переменные.
источник
isdigit
сложно, примерь это-1
.int(<str>)
это способ проверить с помощьюtry
/except
.источник
Попробуй это.
x - строка, потому что вокруг нее есть кавычки, но в ней есть число.
Поскольку х содержит число 1, я могу превратить его в целое число.
Чтобы увидеть, является ли строка числом, вы можете сделать это.
Он должен печатать в IDLE True, потому что x это число.
Он должен печатать в IDLE False, потому что у не число.
источник
x.isnumeric()
.Использование списочных представлений:
источник
В Python 3.5.1 такие вещи работают:
а также
Джордж.
источник
Смотрите эту функцию
затем
Вы также можете проверить
источник
eval
это зло: вы должны заменить его наast.literal_eval
.Еще одно функциональное решение для Python 2:
Python 3 будет немного грязным, хотя:
мы можем исправить это с помощью обертки
источник
Если это всего лишь кортеж кортежей, что-то вроде этого
rows=[map(int, row) for row in rows]
поможет. (Здесь есть понимание списка и вызов map (f, lst), который равен [f (a) для a in lst].)Eval - это не то, что вы хотите делать, если
__import__("os").unlink("importantsystemfile")
по какой-то причине в вашей базе данных что-то есть. Всегда проверяйте ввод (если ни с чем, исключение int () будет вызывать, если у вас неверный ввод).источник
Вы можете сделать что-то вроде этого:
источник
Я хочу поделиться доступной опцией, которая, кажется, еще не упомянута здесь:
Будет генерировать случайную перестановку массива х. Не совсем то , что вы просили, но это потенциальное решение для подобных вопросов.
источник