本问题已经有最佳答案,请猛点这里访问。
我认为[没有]和[没有]是一样的,但在我的测试中,也许有什么…
>>>print len([])
0
>>>print len([None])
1
我什么时候应该使用"无"?和[]
还有一个有趣的问题
>>>c= []
>>>d= []
>>>print c is d
False
>>>a= 1
>>>b=1
print a is b
True
为什么空列表的ID授予不同?
1。[]—一个列表,其中包含任何项目。[None]—包含None对象的列表。
2。您需要使用==而不是is来检查相等性。使用is检查身份(对于单体物体,如None、True、False)
@错误:那些不要求更多信息或建议改进的,所以不应该是评论。
is检查两个变量是否指向同一对象,而==检查变量引用的对象是否相等。参见stackoverflow.com/questions/132988/…
stackoverflow.com/questions/13805882/…
我认为否决这样一个问题是不公平的…+1到偶数。
使用"无"还是空列表取决于您的应用程序。你有什么特别想做的吗?
下次,请通过谷歌做基础研究。像"python what is none"和"python list is list"这样的查询将返回非常有用的结果。事实上,前者的第一个结果是链接副本,后者的第一个结果是这个,这是对列表身份比较的完美解释。
[]是一个空列表
[None]是一个包含一个元素的列表。其中一个元素是None。
is检查参考等式。如果两个对象都引用同一个对象,那么is将返回true。
a = []
b = a
a is [] #false
a is b #true
None是一个有效的元素,但您可以将其视为存根或占位符。因此,即使只有一个None,它也算作列表中的一个元素。对于(相等)比较,不应使用is。使用==!
因为如果你不知道何时以及如何使用它,is会导致奇怪的行为。例如:
>>> 1900 is 1900
True
>>> a = 1900
>>> b = 1900
>>> a is b
False
>>> a, b = 1900, 1900
>>> a is b
True
例如,在这个问题中解释了这种相当奇怪的行为:为什么Python处理"1是1**2"与"1000是10**3"不同?
使用==时不会发生这种情况:
>>> a == b
True
>>> 1900 == 1900
True
正如人们所期望的。
问题1:
无是对象。它是"非类型"类型。这可以通过在终端中执行类似的操作看到:
>>> type(None)
所以,当你把这个对象放在一个列表中时,这个列表有一个元素。问题2:
python中的赋值操作符=用于将名称附加到对象。对于不可变对象(如整数),可以将多个名称附加到同一对象。这就是你对a和b所做的。因此,当您使用is操作符测试它们的身份时,您会看到这两个名称指向相同的对象。
或者,当您将一个名称附加到一个新创建的列表(使用[]操作符创建的)时,它每次都是一个不同的列表。
[None]并不意味着清单中没有任何内容。None是python中的一个关键字,具有特殊的含义。在其他语言中,它类似于NIL或NULL。
当你说[None]的时候,你是说"我想要一个列表,其中包含一个特殊的对象,叫做None"。这不同于"我想要一个不包含元素的列表"(通过键入[])。
你想用None来暗示没有有效的对象。您希望使用[]来表示一个类型为list且没有元素的对象。
[None]是一个元素为None的列表。
>>>c= [] # This is a new list object
>>>d= [] # This is another new list object
在python中,x is y用于检查x和y是否是相同的对象。这里,c和d指向不同的列表对象。所以,
>>>print c is d
False
是意料之中的事。
另一方面,
>>>c= [] # This is a new list object
>>>d = c # This is the same object as c
>>>print c is d
True
这里,A和B是基本体,而不是对象
>>>a= 1
>>>b=1
因此,这是预期的:
print a is b
True
实际上,这里有一个技巧是在Python中的原语上使用。因为Python中的所有内容都是一个对象,所以即使是ints也是。之所以1为1将返回true,是因为出于性能原因,python缓存小整数对象。Try 10000000是10000000,它将返回false。