我不清楚語法!=
和is not
之間的區別。他們似乎做同樣的事情:Python:!=和「不是」之間的區別
>>> s = 'a'
>>> s != 'a'
False
>>> s is not 'a'
False
但是,當我在一個列表理解使用is not
,它會產生不同的結果,如果我用!=
。
>>> s = "hello"
>>> [c for c in s if c is not 'o']
['h', 'e', 'l', 'l', 'o']
>>> [c for c in s if c != 'o']
['h', 'e', 'l', 'l']
爲什麼o
獲得列入第一個列表,而不是第二個列表?
當您查看這兩個運算符的Python語言參考時,您看到了什麼?這看起來很清楚:http://docs.python.org/reference/expressions.html#notin。什麼讓你感到困惑? – 2011-04-25 19:40:29
@ FChannel72我認爲在表達式「c不是'o'''中**的存在會引起對」id(c)不是'o'''的評估。由於一個數字(地址id(c))不是一個字符串,所以測試結果爲True,所以** c **保存在構建的列表中。 – eyquem 2011-04-25 20:04:34
@ FChannel72問題是我驗證了你的結果,並且我爲這兩個表達式獲得了''['h','e','l','l']'!我想知道爲什麼,如果''is''的存在引發比較id(c),它不會引起與id('o')的比較。事實上,看起來''c不是'o'''被評估爲''id(c)!= id('o')''...在我的Python 2.7 – eyquem 2011-04-25 20:13:24