Python 为什么每个字符串都包含空字符串?

Python 为什么每个字符串都包含空字符串?,python,string,Python,String,“ABCDE”没有空字符。但是当我打字的时候 "" in "ABCDE" Python解释器返回True 为什么? “ABCDE”中有空字符吗?我不这么认为 我还发现,当我使用这些代码时: target = '' src = 'ABCDE' src.find(target) 它返回0而不是-1 这是为什么呢?对于那些具有字符串对象表示为字符数组的语言背景的人来说,这可能会令人惊讶,但如果我们尝试采用类似 string = 'ABCDE' characters_list = list(stri

“ABCDE”没有空字符。但是当我打字的时候

"" in "ABCDE"
Python解释器返回
True

为什么?

“ABCDE”中有空字符吗?我不这么认为

我还发现,当我使用这些代码时:

target = ''
src = 'ABCDE'
src.find(target)
它返回0而不是-1


这是为什么呢?

对于那些具有字符串对象表示为字符数组的语言背景的人来说,这可能会令人惊讶,但如果我们尝试采用类似

string = 'ABCDE'
characters_list = list(string)
然后

将是
False
语句

空字符串可能来自,它是二进制操作的中性元素,即。E对于每个字符串
a

a + empty_string == empty_string + a == a
其中,
+
是字符串连接符号。那么“子串”可以定义如下:

  • 对于每个字符串
    a
    b
    我们说
    a
    b
    的子字符串,如果存在字符串
    c
    d
    ,则

    b == c + a + d
    
让我们将
a
表示为
b
的子串,作为
a在b

利用这些空字符串和子字符串的定义,可以证明它们之间的关系是引理

  • empty_string
    是任何字符串
    a
    的子字符串:

    a == (definition of empty_string) == empty_string + a == 
    == (definition of empty_string) == empty_string + empty_string + a
    
    a == c + empty_string + d
    
    然后,如果我们定义
    c=empty_string
    d=a

    a == c + empty_string + d
    
    根据定义,中的空字符串


对于有字符串对象表示为字符数组的语言背景的人来说,这可能会令人惊讶,但如果我们尝试采用类似

string = 'ABCDE'
characters_list = list(string)
然后

将是
False
语句

空字符串可能来自,它是二进制操作的中性元素,即。E对于每个字符串
a

a + empty_string == empty_string + a == a
其中,
+
是字符串连接符号。那么“子串”可以定义如下:

  • 对于每个字符串
    a
    b
    我们说
    a
    b
    的子字符串,如果存在字符串
    c
    d
    ,则

    b == c + a + d
    
让我们将
a
表示为
b
的子串,作为
a在b

利用这些空字符串和子字符串的定义,可以证明它们之间的关系是引理

  • empty_string
    是任何字符串
    a
    的子字符串:

    a == (definition of empty_string) == empty_string + a == 
    == (definition of empty_string) == empty_string + empty_string + a
    
    a == c + empty_string + d
    
    然后,如果我们定义
    c=empty_string
    d=a

    a == c + empty_string + d
    
    根据定义,中的空字符串


    • 这里有一个定性的方式来考虑它。考虑以下事项:

      >>> "foo"[0:0]
      ''
      

      对字符串执行零宽度切片将返回
      '
      。因此,如果你能从字符串中得到
      '
      ,它必须在字符串中,因此“foo”中的
      ''必须为真。

      这里有一个定性的方法来考虑它。考虑以下事项:

      >>> "foo"[0:0]
      ''
      

      对字符串执行零宽度切片将返回
      '
      。因此,如果您可以从字符串中获取
      '
      ,则它必须在字符串中,因此“foo”
      中的
      ''必须为真。

      您所说的“空字符”是什么意思?您认为字符串
      包含多少个字符?
      甚至是
      中的
      您实际要测试什么?字符串是否包含空格?或者大于0个字符?因为
      'ABCDE'
      可以表示为
      '+'ABCDE'
      ,所以第一次出现的空字符串为零position@BingSun,一个“空字符串”是有意义的。“空字符”是没有意义的。事实上,空字符串是任何字符串的子字符串(实际上是多个子字符串)。尝试
      'foo'[0:0]
      'foo'[1:0]
      等。事实上,可以在字符串
      'ABCDE'
      中找到空字符串。这一点也很清楚。我会将其归类为未定义的操作。如果您试图问“能否将
      '
      放入字符串
      x
      ”,那么答案是肯定的,因为您可以在任何字符串中的任何点插入
      '
      ,而无需更改它,因此您可以在任何字符串中找到它,因此任何字符串都包含
      '
      。你也可以提出完全相反的观点。无法在字符串中表示
      '
      。字符串可以是
      '
      ,字符串不能包含
      '
      。一句话:“…”中的“
      根本没有真正的意义,我也不希望从中得到什么特别正确的答案。你说的“空字符”是什么意思?您认为字符串
      包含多少个字符?
      甚至是
      中的
      您实际要测试什么?字符串是否包含空格?或者大于0个字符?因为
      'ABCDE'
      可以表示为
      '+'ABCDE'
      ,所以第一次出现的空字符串为零position@BingSun,一个“空字符串”是有意义的。“空字符”是没有意义的。事实上,空字符串是任何字符串的子字符串(实际上是多个子字符串)。尝试
      'foo'[0:0]
      'foo'[1:0]
      等。事实上,可以在字符串
      'ABCDE'
      中找到空字符串。这一点也很清楚。我会将其归类为未定义的操作。如果您试图问“能否将
      '
      放入字符串
      x
      ”,那么答案是肯定的,因为您可以在任何字符串中的任何点插入
      '
      ,而无需更改它,因此您可以在任何字符串中找到它,因此任何字符串都包含
      '
      。你也可以提出完全相反的观点。无法在字符串中表示
      '
      。字符串可以是
      '
      ,字符串不能包含
      '
      。一句话:“…”中的“
      根本没有真正的意义,我也不希望从中得到什么特别正确的答案。太棒了!我喜欢的是,你不仅仅以不同的表现(字符数组)结束。相反,你做了一个离散的数学证明。谢谢,我想我们应该学会更多地用这种方式回答。太棒了!我喜欢你不只是