Если все в списке == что-то

Используя Python 2.6, есть ли способ проверить, соответствует ли все элементы последовательности равным заданному значению в одном выражении?

[pseudocode] my_sequence = (2,5,7,82,35) if all the values in (type(i) for i in my_sequence) == int: do() 

Вместо, скажем:

 my_sequence = (2,5,7,82,35) all_int = True for i in my_sequence: if type(i) is not int: all_int = False break if all_int: do() 

4 Solutions collect form web for “Если все в списке == что-то”

Использование:

 all( type(i) is int for i in lst ) 

Пример:

 In [1]: lst = range(10) In [2]: all( type(i) is int for i in lst ) Out[2]: True In [3]: lst.append('steve') In [4]: all( type(i) is int for i in lst ) Out[4]: False 

[Редактировать]. Сделано чище в соответствии с комментариями.

Ты имеешь ввиду

 all( type(i) is int for i in my_list ) 

?

Изменить: Изменено. Чуть быстрее.

Я бы предложил:

 if all(isinstance(i, int) for i in my_list): 

all и any впервые появились в Python 2.5. Если вы используете более старую версию Python, ссылки предоставляют примеры реализации.

Я также предлагаю использовать isinstance так как он также поймает подклассы int .

Ради полноты я думал, что добавлю, что «все» NumPy отличается от встроенного «все». Если, например, запуск Python через Python (x, y), NumPy загружается автоматически (и не может быть выгружен, насколько я знаю), поэтому при попытке запустить вышеуказанный код он дает довольно неожиданные результаты:

 >>> if (all(v == 0 for v in [0,1])): ... print 'this should not happen' ... this should not happen 

Более подробная информация об этом содержится в вопросе о переполнении стека, отличном от встроенного . В качестве решения вы можете либо окружить генератор скобками, чтобы создать список:

 >>> all( [v == 0 for v in [0,1]] ) False 

Или вызовите встроенную функцию явно:

 >>> __builtins__.all(v == 0 for v in [0,1,'2']) False 

Я нашел способ остановить Spyder от импорта NumPy по умолчанию: список импорта модулей по умолчанию Spyder

  • Как получить Python isidentifer () в Python 2.6?
  • Python 2.6.1: ожидаемый разделитель пути ([)
  • AttributeError: объект 'module' не имеет атрибута 'pydebug'
  • Самонастраивающийся Python? Как я могу перенаправить все операторы печати внутри функции, не касаясь sys.stdout?
  • Вызов приложения из subprocess.call с аргументами
  • Разбор синтаксиса в python 3
  • изменение меток оси в диаграммах excel 2007 с использованием python win32com
  • Самый быстрый способ слияния n-словарей и добавления значений на 2.6
  • Python - лучший язык программирования в мире.