Подтвердить что ты не робот

Как проверить, есть ли каждый элемент в списке типа 'int'?

Скажем, у меня есть список чисел. Как я могу проверить, что каждый элемент в списке является int?
Я искал вокруг, но ничего не смог найти.

for i in myList:
  result=isinstance(i, int)
  if result == False:
    break

будет работать, но на мой взгляд выглядит очень уродливым и бесстрашным.
Есть ли лучший (и более питонический) способ сделать это?

4b9b3361

Ответ 1

>>> my_list = [1, 2, 3.25]
>>> all(isinstance(item, int) for item in my_list)
False

>>> other_list = range(3)
>>> all(isinstance(item, int) for item in other_list)
True
>>> 

Ответ 2

Следующее утверждение должно работать. Он использует выражение any builtin и generator:

any(not isinstance(x, int) for x in l)

Это вернет true, если в списке есть не-int. Например:.

>>> any(not isinstance(x, int) for x in [0,12.])
True
>>> any(not isinstance(x, int) for x in [0,12])
False

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

all(isinstance(x,int) for x in l)

Ответ 3

In [1]: a = [1,2,3]

In [2]: all(type(item)==int for item in a)
Out[2]: True

Ответ 4

Один подход не должен был проверяться, а настаивать. Это означает, что ваша программа может обрабатывать более широкий диапазон входов разумно - это не сработает, если кто-то передаст ей поплавок.

int_list = [int(x) for x in int_list]

или (на месте):

for i, n in enumerate(int_list):
    int_list[i] = int(n)

Если что-то не может быть преобразовано, оно выдает исключение, которое вы можете поймать, если хотите.

Ответ 5

См. функции

def is_int(x):
    if type(x) == int:
        return True
    return


def all_int(a):
    for i in a:
        if not is_int(i):
            return False
    return True

Затем вызовите

all_int(my_list) # returns boolean

Ответ 6

lst = [1,2,3]
lst2 = [1,2,'3']

list_is_int = lambda lst: [item for item in lst if isinstance(item, int)] == lst

print list_is_int(lst)
print list_is_int(lst2)

suxmac2:~$ python2.6 xx.py 
True
False

.... одно возможное решение из многих, используя понимание списка или фильтр()

Ответ 7

Нашел себя в подобной ситуации, но в несколько другом состоянии: если "целые числа" в вашем списке представлены как строки, и вы просто хотите проверить, могут ли элементы списка быть представлены целыми числами, вы можете использовать

all(i.isdigit() for i in myList)

Например:

>>> myList=['1', '2', '3', '150', '500', '6']
>>> all(i.isdigit() for i in myList)
True

>>> myList2=['1.5', '2', '3', '150', '500', '6']
>>> all(i.isdigit() for i in myList2)
False

Это было для меня после использования line.split() в строке целых чисел в текстовом файле, который присваивал всем элементам тип 'string'.