2011-05-15 28 views
13

说我有一个数字列表。我将如何检查列表中的每个项目是否为int?
我已经搜索周围,但一直没能找到任何关于此。如何测试'int'类型列表中的每个项目?

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

会工作,但看起来非常丑陋和unpythonic在我看来。
有没有更好的(更pythonic)这样做?

+1

为什么你需要首先检查这个?使用鸭子打字是pythonic,检查类型没有很好的理由不是 - 你有一个很好的理由? – delnan 2011-05-15 16:17:37

回答

37
>>> 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 
>>> 
+0

如果生成器表达式是唯一的参数,则双parens是可选的。 – delnan 2011-05-15 16:18:12

+0

@delnan:好抓,看到编辑 – 2011-05-15 16:20:38

+0

+1'all'功能使得比'any'功能更有意义。 (很肯定他们是等价的运行方面,虽然) – WirthLuce 2011-05-15 16:25:19

5

以下声明应该起作用。它使用内置any和发电机的表达:

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

,如果有一个非int类型列表中这将返回true。例如:

>>> 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) 
+0

我想知道哪个'al'l或'any'更好用。当'任何'到达一个匹配它的对象停止迭代或它一直持续到最后?因为“全部”肯定会迭代所有的元素,但如果有的话则不会。对我而言,最好使用'any' – 2017-03-14 11:28:31

-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 

....一个可能的解决方案之一是使用列表理解或过滤器()

+1

这会在内存中创建另一个列表,如果列表很大,这可能会非常成问题。生成器表达式是优选的。 – WirthLuce 2011-05-15 16:24:03

0

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

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

或(就地):

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

如果事情不能转换,它会抛出一个异常,而如果你愿意,你可以再搭上。

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

In [2]: all(type(item)==int for item in a) 
Out[2]: True 
-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'。

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 
相关问题