Попробую еще раз. Мой первоначальный ответ был кратким, но, увы, НЕПРАВИЛЬНЫМ. На ту же тему мне пришло в голову заменить конструкцию с участием lambda
. Правильный результат. Возможно, это позволило бы быстрее достичь требуемых результатов?
>>> my_list = [0,2,3,4]
>>> all(map(lambda x: type(x)==int, my_list))
True
Соответственно я рассчитал время двух подходов:
s = '''\
my_list = [0, 2, 3, 4]
for i in my_list:
if not isinstance(i, int):
raise Exception('Found a non-int!')'''
print (timeit.timeit(s))
s = '''\
my_list = [0,2,3,4]
all(map(lambda x: type(x)==int, my_list))'''
print (timeit.timeit(s))
со следующим выводом:
0.6864084666728032
1.3789049683458745
Подход, основанный на map
, не только не быстрее, но и занимает в два раза больше времени. Неустрашимый (или свиноголовый, если хотите) я подумал, что может быть какое-то время установки, которое объясняет производительность «моего» подхода. Поэтому я попробовал гораздо больший список.
s = '''\
my_list = list(range(2000))
for i in my_list:
if not isinstance(i, int):
raise Exception('Found a non-int!')'''
print (timeit.timeit(s))
s = '''\
my_list = list(range(2000))
all(map(lambda x: type(x)==int, my_list))'''
print (timeit.timeit(s))
со следующими результатами:
305.03338925738615
478.1060787659975
И снова подход с использованием map
и lambda
намного медленнее.
(Я постараюсь забыть, что написал это.)
Кратко:
>>> my_list = [1,2,3,4]
>>> all(map(int, my_list))
True
В Python список может содержать элементы любого типа.
>>> a_list = [1, 'b', 5, 7]
Я уже должен был понять, что стоит делать тайминги. Я обновил свой ответ.