说我有一个数字列表。如何检查列表中的每个项目是否为int? 我四处寻找,但一直没能找到任何东西。
for i in myList:
result=isinstance(i, int)
if result == False:
break
会起作用,但在我看来看起来非常丑陋和不熟悉 有没有更好的(和更多的pythonic)方式这样做?
答案 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
内置也可以完成相同的任务,有些人可能会认为它更有意义(参见Dragan的answer)
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'。