如何测试'int'类型列表中的每个项目?

时间:2011-05-15 16:11:46

标签: python list int

说我有一个数字列表。如何检查列表中的每个项目是否为int? 我四处寻找,但一直没能找到任何东西。

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

会起作用,但在我看来看起来非常丑陋和不熟悉 有没有更好的(和更多的pythonic)方式这样做?

7 个答案:

答案 0 :(得分:41)

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

答案 1 :(得分:7)

以下陈述应该有效。它使用any内置函数和生成器表达式:

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

如果列表中存在非int,则返回true。 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内置也可以完成相同的任务,有些人可能会认为它更有意义(参见Dragananswer

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

一种方法不是测试,而是坚持。这意味着您的程序可以智能地处理更广泛的输入 - 如果有人将其传递给浮点数,它将不会失败。

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

或(就地):

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

如果无法转换某些内容,则会抛出异常,如果您愿意,可以捕获该异常。

答案 4 :(得分:0)

见功能

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

答案 5 :(得分:-1)

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

....使用list comprehension或filter()

的许多可能的解决方案

答案 6 :(得分:-2)

发现自己处于类似情况但情况略有不同:如果"整数"在您的列表中表示为字符串,您只想检查列表的元素是否表示为整数,您可以使用:

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