【问题标题】:python string (with space) matchingpython字符串(带空格)匹配
【发布时间】:2016-12-15 12:18:47
【问题描述】:

在尝试消除字符串列表中的几个字符串时,我尝试使用类似于以下的简单代码:

>>> 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

需要特殊处理的空间吗?我错过了什么?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果你想强制它工作,你可以做一些可怕的事情,比如明确地interning 所有涉及的字符串,但这并不能节省任何工作(工作都花在实习上),而且通常会被皱眉上。

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多