说我有一个数字列表。我将如何检查列表中的每个项目是否为int?
我已经搜索周围,但一直没能找到任何关于此。如何测试'int'类型列表中的每个项目?
for i in myList:
result=isinstance(i, int)
if result == False:
break
会工作,但看起来非常丑陋和unpythonic在我看来。
有没有更好的(更pythonic)这样做?
说我有一个数字列表。我将如何检查列表中的每个项目是否为int?
我已经搜索周围,但一直没能找到任何关于此。如何测试'int'类型列表中的每个项目?
for i in myList:
result=isinstance(i, int)
if result == False:
break
会工作,但看起来非常丑陋和unpythonic在我看来。
有没有更好的(更pythonic)这样做?
>>> 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
>>>
以下声明应该起作用。它使用内置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
内置也可以完成相同的任务,而有些人可能会认为这是使稍微更有意义(见Dragan的answer)
all(isinstance(x,int) for x in l)
我想知道哪个'al'l或'any'更好用。当'任何'到达一个匹配它的对象停止迭代或它一直持续到最后?因为“全部”肯定会迭代所有的元素,但如果有的话则不会。对我而言,最好使用'any' – 2017-03-14 11:28:31
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
....一个可能的解决方案之一是使用列表理解或过滤器()
这会在内存中创建另一个列表,如果列表很大,这可能会非常成问题。生成器表达式是优选的。 – WirthLuce 2011-05-15 16:24:03
一种方法不是测试,而是坚持。这意味着您的程序可以智能地处理更广泛的输入 - 如果有人将其传递给float,它不会失败。
int_list = [int(x) for x in int_list]
或(就地):
for i, n in enumerate(int_list):
int_list[i] = int(n)
如果事情不能转换,它会抛出一个异常,而如果你愿意,你可以再搭上。
In [1]: a = [1,2,3]
In [2]: all(type(item)==int for item in a)
Out[2]: True
发现自己处于类似的情况,但略有不同的条件下:如果你的列表中的“整数”表示为字符串,你只是想检查列表的元素可以是代表作为整数,你可以使用:
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'。
查看功能
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
为什么你需要首先检查这个?使用鸭子打字是pythonic,检查类型没有很好的理由不是 - 你有一个很好的理由? – delnan 2011-05-15 16:17:37