python字符串(带空格)匹配
在尝试删除字符串列表中的几个字符串时,我尝试使用类似以下的简单代码:python字符串(带空格)匹配,python,string,python-3.x,string-comparison,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 我无法理解潜在的行为? 你能解释一下吗?因为下面的内容似乎合乎逻辑,
>>> 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
空间是否需要特殊处理?我缺少什么?
不是一种基于身份的测试;当它在字符串上工作时,这是由于字符串的内部存储或小字符串缓存造成的;这是一个永远不应该依赖的实现细节
通常不要使用is
/is not
,除非与None
进行比较,直到您真正理解它在做什么。你想要=代码>这里,哪一个(两个对象代表相同的逻辑信息?),而不是不是,这两个对象(都是指完全相同的对象?)
如果你想强迫它工作,你可以做一些可怕的事情,比如显式地插入所有涉及的字符串,但这并不能节省任何工作(这项工作是花在插入字符串上的),而且这通常是不受欢迎的。不是一种基于身份的测试;当它在字符串上工作时,这是由于字符串的内部存储或小字符串缓存造成的;这是一个永远不应该依赖的实现细节
通常不要使用is
/is not
,除非与None
进行比较,直到您真正理解它在做什么。你想要=代码>这里,哪一个(两个对象代表相同的逻辑信息?),而不是不是,这两个对象(都是指完全相同的对象?)
如果你想强迫它工作,你可以做一些很糟糕的事情,比如显式地intern
ing所有涉及的字符串,但这并不能节省任何工作(这项工作是花在对它们进行实习上的),这通常是不赞成的