【问题标题】:Too many values to unpack (expected 2) while splitting string拆分字符串时要解压的值太多(预期为 2)
【发布时间】:2021-01-29 00:09:57
【问题描述】:

我希望在 "(" 处拆分字符串,如果字符串中只有一个 "(" 字符,这可以正常工作。但是,如果有多个这样的字符,则会引发值错误too many values to unpack

data = 'The National Bank (US) (Bank)'

我试过下面的代码:

name, inst = data.split("(")

期望的输出:

name = 'The National Bank (US)'
inst = '(Bank)'

【问题讨论】:

    标签: python string


    【解决方案1】:

    您的 split 方法将输入拆分为两个 ( 字符,为您提供结果:

    ["The National Bank ", "US) ", "Bank)"]
    

    然后,您尝试将这个 三个 值列表解压缩为 两个 变量,nameinst。这就是错误 “Too many values to unpack” 的含义。

    您可以使用第二个参数将拆分次数限制为split,但这也会给您错误的结果。

    您实际上想从字符串的右侧拆分第一个空格字符。你可以用rsplit做到这一点:

    data = 'The National Bank (US) (Bank)'
    name, inst = data.rsplit(' ', 1)
    

    nameinst 现在将按照您的预期设置。

    【讨论】:

      【解决方案2】:

      这是该函数的预期行为。当你用 n 个分隔符分割字符串时,你会得到 n+1 个字符串作为回报 例如

      l = '1,2,3,4'.split(',')
      print(l)
      print(type(l), len(l))
      

      【讨论】:

        【解决方案3】:

        您可以像这样将 rsplit 与 maxsplit 参数一起使用,尽管您必须将前导 ( 附加到您的 inst 字符串:

        >>> name, inst = data.rsplit("(", maxsplit=1)
        >>> name
        'The National Bank (US) '
        >>> inst
        'Bank)'
        

        您可以通过做同样的事情但传递一个空格作为分隔符来获得更清晰的结果:

        >>> name, inst = data.rsplit(" ", maxsplit=1)
        
        >>> name
        'The National Bank (US)'
        >>> inst
        '(Bank)'
        

        【讨论】:

          猜你喜欢
          • 2019-12-28
          • 1970-01-01
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          • 2020-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多