【问题标题】:Why Simple String's Character has So many array Dimensions?为什么简单字符串的字符有这么多数组维度?
【发布时间】:2017-11-27 12:17:46
【问题描述】:

我目前正在研究 python 的字符串和列表。

当我在变量str="string" 中分配字符串并尝试通过str[0] 访问它的第一个字符时,它可以完美运行并给出"s"

但是,当我尝试查找字符 str[0][0][0][0][0][0] 时,它再次给出了 "s"。但是当我给str[0][1]它给出一个错误:

IndexError: string index out of range 

它是正确的。我的问题是为什么简单字符串字符有这么多数组维度?并且在str[0][0][0][0][0][0] 时没有给出任何错误并打印字符串的 0 个字符。什么是字符串的数据结构?

我的代码是

str="string"
print((str[0][0][0][0][0][0][0][0])) # Working, but my Question is Why Working
print((str[1][0][0][0][0]))          # Working
print((str[2][0][0][0][0]))          # Working
print((str[3][0][0][0][0]))          # Working
list=["0","p",0]
print(list[0][0][0])                 # Working

我的输出是:

s
t
r
i
0

【问题讨论】:

    标签: python arrays string python-3.x list


    【解决方案1】:

    为什么它不能工作?

    对字符串进行索引会返回一个元素字符串,该字符串再次可索引并返回相同的值:

    >>> 's'[0]
    's'
    

    由于它由一个元素组成,因此您可以根据需要继续索引零元素 [0]

    Python 参考手册的standard type hierarchy 部分对此进行了说明:

    字符串

    字符串是表示 Unicode 代码点的值序列。 U+0000 - U+10FFFF 范围内的所有代码点都可以用字符串表示。 Python 没有 char 类型;相反,字符串中的每个代码点都表示为长度为 1 的字符串对象。

    (强调我的)


    旁注:不要使用诸如str 之类的名称,您会屏蔽内置的str

    【讨论】:

    • 你的意思是字符串是由字符串而不是字符组成的。
    • @Artier 基本上是的。 Python 没有 char 类型。
    【解决方案2】:

    在 Python 中,字符串是一个字符序列,但字符是 1 个字符的字符串。

    因此,如果您访问'foobar'[0],您将获得'f'。然而,由于f 是一个字符串,我们可以访问该字符串的第一个字符。因为'f'[0]'f'。因此,如果您使用s[i][0][0][0] 访问字符串s,您将继续访问字符串s 的第一个字符。

    如果你写s[i][1],这会出错,因为s[i]是一个字符的字符串,因此你无法获得第二个字符,因为没有这个字符。

    字符串本身不是多维的,您只需获取一个新字符串并调用该新字符串的索引即可。您可以添加任意数量的[0]s。

    【讨论】:

      【解决方案3】:

      问题不在 Python 中,这是因为您假设 Python 中有 char 类型(基于此问题的标题)。

      Python 中的字符串本质上是由单个元素字符串组成的数组。 s[0] 只返回 字符串 's',而不是一个字符。 s[0]...[0] 可以被认为是一个无限递归,它不断获得相同的单个元素字符串,infinitely 很多次。

      你可以随心所欲:(在这种情况下,为了超过 997 次,你需要修改 Python 的默认允许递归深度)

      def string_dive(s, count=0):
          if count < 997:
              count += 1
              return string_dive(s[0], count)
          else:
              return s
      
      print(string_dive('string'))
      # 's'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-18
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        • 2018-05-16
        • 2019-01-09
        • 1970-01-01
        相关资源
        最近更新 更多