Python не позволит сложить строку и число, даже если строка выглядит как число, то есть содержит только цифры:
>>> '50' + 1 # TypeError: cannot concatenate ‘str’ and ‘int’ objects
В архитектуре языка оператор '+'
может означать как операцию сложения, так и операцию конкатенации, вследствие чего выбор типа преобразования становится неочевидным. Поэтому интерпретатор воспринимает такую инструкцию как ошибочную. В этом случае нужно использовать инструменты преобразования, чтобы можно было интерпретировать строку как число или наоборот.
int
или float
.int
;float
;int
.Дополнительно смотрите описание функции int()
# преобразование строки в число >>> num = '50' >>> if num.isdigit(): ... int('50') # 50 >>> float('1.5') # 1.5 # преобразование числа в строку >>> str(50) # '50'
Функции int
и float
преобразует строку в число, функция str преобразует число в строковое представление. В Python нельзя смешивать строковые и числовые типы в таких операторах, как '+'
, но можно вручную выполнить необходимые преобразования перед выполнением.
float
.Дополнительно смотрите описание функции float()
>>> x = '50' >>> y = 1 >>> z = '1.5' # Операция сложения >>> int(x) + y + float(z) # 52.5 # Операция конкатенации >>> x + str(y) + z # '5011.5' # Преобразование строки с записью вещественного # числа в число с плавающей точкой >>> text = '5.79E-10' >>> float(text) # 5.79e-10
Для преобразования списка строк с числами в список целых чисел можно ввести проверку перед преобразованием на то, что строка состоит только из десятичных чисел str.isdigit()
.
>>> str_list = ['8.3', '11', 'девять', '1', '5', '3', '9', ... 'пять', '15', '13', '7', '13.9', 'число'] >>> num_list = [] >>> for i in str_list: ... if i.isdigit(): ... num_list.append(int(i)) >>> num_list.sort() >>> num_list # [1, 3, 5, 7, 9, 11, 13, 15]
Для преобразования списка строк с числами включая десятичные c разделением их по типам, необходимо перед преобразованием в тип float
проверять строку на вхождение точки '.'
.
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', ... '.пять', '15', '13', '7', '13.9', 'число'] >>> def str_to_num(str): ... if '.' in str and str.replace('.', '').isdigit(): ... return float(str) ... elif str.isdigit(): ... return int(str) ... >>> num_list = [] >>> for i in str_list: ... n = str_to_num(i) ... if n is not None: ... num_list.append(str_to_num(i)) >>> num_list # [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9]
Для преобразования всех чисел в тип float
, можно просто заменять точку в строке с числом и проверять получившуюся строку на десятичное число.
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', ... '.пять', '15', '13', '7', '13.9', 'число'] >>> def is_num(str): ... if str.replace('.', '').isdigit(): ... return True ... >>> num_list = [] >>> for i in str_list: ... if is_num(i): ... num_list.append(float(i)) ... >>> num_list.sort() >>> num_list # [1.0, 3.0, 5.0, 7.0, 8.3, 9.0, 11.0, 13.0, 13.9, 15.0]