python字符串(带空格)匹配

时间:2016-12-15 12:18:47

标签: python string python-3.x string-comparison

在尝试消除字符串列表中的少数字符串时,我尝试使用类似于:

的简单代码
>>> s = ['a b', 'c d', 'e f', 'g h']
>>> for i in s:
...     if i is not 'e f':
...         print(i)
...
a b
c d
e f    # this should not get printed, right?
g h

我无法理解潜在的行为? 你能解释一下吗?因为以下似乎合乎逻辑,上面也应该相应地工作

>>> if 'a b' is not 'a b':
...     True
... else:
...     False
...
False
>>> s = ['a', 'c', 'e', 'g']
>>> for i in s:
...     if i is not 'e':
...         print(i)
...
a
c
g

是要特别对待的空间吗?我错过了什么?

1 个答案:

答案 0 :(得分:3)

is not是基于身份的测试;当它在字符串上工作时,它是由于字符串的内部或小字符串缓存;这是一个永远不应该依赖的实现细节。

除了与is的比较之外,一般不要使用is not / None,除非您真正理解它在做什么。你想在这里!=tests value(这两个对象代表相同的逻辑信息吗?),而不是is nottests identity(两者都指的是完全相同的对象?)。

如果你想迫使它发挥作用,你可以做一些可怕的事情,比如明确地intern所涉及的所有字符串,但这不会保存任何工作(工作花费在他们身上),而且它是一般不赞成。