Python嵌套的整数列表未按预期返回

时间:2012-05-23 05:58:57

标签: python list types

我正在写这个函数,检查列表列表是否是一个有效的数独谜题。当我检查有效整数的列表时,我得到了意想不到的结果。

例如:

lst = [[1,2,3],[2,3,1],[4,2,1]]
for i in lst: 
  for v in i:
    print type(v)

<type 'int'>   #all the way through

for i in lst:
  for v in i:
    if v is int:
      print True

什么都不打印,当我进入时:

for i in lst:
  for v in i:
    if v is not int:
      print False

打印全部错误?不确定发生了什么,特别是显示它们是整数的类型。

4 个答案:

答案 0 :(得分:5)

而不是说

if v is int:

询问v是否为实际类型int

if isinstance(v, int):

表示v是实例化的int(或子类)

这是一个例子,首先是一个整数(或实例化的int

>>> v = 17
>>> type(v)
<type 'int'>
>>> v is int
False
>>> isinstance(v, int)
True
>>> 

接下来使用类型

>>> v = int
>>> type(v)
<type 'type'>
>>> v is int
True
>>> isinstance(v, int)
False
>>> 

答案 1 :(得分:2)

没有整数与int是同一个对象。您想使用isintance

想要使用type(v) == int,因为如果vint的子类,那么评估为False,这在大多数情况下都是如此根本不是理想的行为;如果你确实这样做,真的想要那样做,type(v) is int,因为is是与特定对象(类型是什么)进行比较的预期样式。

答案 2 :(得分:2)

v is not int

与说法相同,但是

的可读性更高
not v is int

is比较每个操作数(不是类型)的引用,看它们是否相同。这是一个例子:

>>> x = (1,2,3)
>>> y = (1,2,3)
>>> x == y
True
>>> x is y
False

所以v is int显然评估为FalsenotFalse变为True并打印if语句。

使用isinstance(v, int)获得正确的结果。

答案 3 :(得分:1)

答案说你应该使用isinstance是正确的,但另一种方法是使用if type(v) == int