Как проверить, есть ли каждый элемент в списке типа int? - PullRequest
15 голосов
/ 15 мая 2011

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

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

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

Ответы [ 7 ]

41 голосов
/ 15 мая 2011
>>> 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
>>> 
7 голосов
/ 15 мая 2011

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

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

Это вернет true, если в списке есть не-int. E.g.:

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

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

all(isinstance(x,int) for x in l)
1 голос
/ 15 мая 2011
In [1]: a = [1,2,3]

In [2]: all(type(item)==int for item in a)
Out[2]: True
0 голосов
/ 24 июля 2017

См. Функции

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
0 голосов
/ 18 января 2017

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

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'.

0 голосов
/ 15 мая 2011

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

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

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

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

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

0 голосов
/ 15 мая 2011
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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...