Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未按预期返回的Python嵌套整数列表_Python_List_Types - Fatal编程技术网

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

未按预期返回的Python嵌套整数列表,python,list,types,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 全是假的?不确

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

例如:

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
全是假的?不确定发生了什么,尤其是当类型显示它们是整数时。

而不是说

if v is int:
它询问v是否是int的实际类型

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

下面是一个示例,首先是一个整数(或实例化的
int

>v=17
>>>类型(v)
>>>v是int
假的
>>>isinstance(v,int)
真的
>>> 
接下来是一个类型

>>> v = int
>>> type(v)
<type 'type'>
>>> v is int
True
>>> isinstance(v, int)
False
>>> 
>v=int
>>>类型(v)
>>>v是int
真的
>>>isinstance(v,int)
假的
>>> 

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


您不想使用
type(v)==int
,因为如果
v
int
的子类,则该值将计算为False,在大多数情况下,这根本不是所需的行为;如果你真的真的想这样做,那么do
type(v)is int
,因为
is
是与特定对象进行比较的预期样式(这就是类型)。

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

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是int
显然计算为
False
not
False
转换为
True
并打印if语句


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

嘿,谢谢你,尼克,我想说清楚,这是因为v是一个实例化的“type”int,而不是直接赋值的?是的
v
是一个实例化的
int
,而不是类型
int
。我在答案中添加了一个例子,希望能让事情变得更清楚更有帮助,这是对Marcin的评论的扩展,对吗?谢谢你,你的评论与其他人的解释非常吻合。
isinstance
type(v)==int
做的事情不同
isinstance(v,t)
将报告
True
如果
type(v)
评估
t
t
的任何子类@Marcin:我没有声称这等同于isinstance,我说这是OP想要做的另一种方式。子类在此上下文中是不相关的。@Junuxx除非…除非…问题中的示例代码不是OP编写的唯一代码。@Marcin:除非。。。除非数据中可能存在不应传递的
int
子类的实际实例,例如
True
False
。我不相信。我手里的橘子和橘子的概念是一样的吗?我希望python中的
是这样工作的。他们应该用
==
表示等价,而
表示
isinstance
@thg435真的吗?和身份测试相比,您多久编写一次类型检查?@Marcin:我不经常使用这两种方法
如果param是int
对我来说比
isinstance
听起来更好。
v is not int
not v is int
>>> x = (1,2,3)
>>> y = (1,2,3)
>>> x == y
True
>>> x is y
False