【问题标题】:string index out of range python tuples字符串索引超出范围python元组
【发布时间】:2019-02-09 03:45:48
【问题描述】:

我有一个这样的嵌套元组:

tuple = ((1, 2), 3)

我在另一个函数中收到这个元组,我希望能够将其输出为 3 1 2

如果我尝试:

for x in tuple[0]:
    print " %s %s %s" % (tuple[1], x[0], x[1]) 

我收到此错误string index out of range

如果我尝试:

for x in tuple:
    print " %s %s %s" % (tuple[1], x[0])

我得到3 1的输出

【问题讨论】:

    标签: python tuples


    【解决方案1】:

    你应该正确下标:

    >>> t = ((1, 2), 3)
    >>> t[1], t[0][0], t[0][1]
    (3, 1, 2)
    

    【讨论】:

    • 就是这样。不知道我可以将 t[][] 用于嵌套元组。谢谢
    【解决方案2】:

    此代码会将任何此类元组解包为一维元组(只要嵌套在示例中的级别停止):

    new_tuple = []
    for member in old_tuple:
        if type(member)==tuple:
            new_tuple+=member
        else:
            new_tuple.append(member)
    

    【讨论】:

      【解决方案3】:

      当你尝试时:

      for x in tuple[0]:
          print " %s %s %s" % (tuple[1], x[0], x[1]) 
      

      然后当您尝试打印 x[0], x[1] 时,它会显示错误,因为 x 不是元组。

      它只是一个变量,在第一次迭代中存储 tuple[0][0] 的值,在 for 循环的第二次迭代中存储 tuple[0][1] 的值。

      【讨论】:

        【解决方案4】:

        第一种情况

        当您说for x in t[0] 时,您在第一次迭代中访问 1,在第二次迭代中访问 2,因为 t[0] = (1, 2)。因此,当您在 print 语句中访问 x[0] 和 x[1] 时,您的索引超出范围

        第二种情况

        您在第一次迭代中打印了 tuple[1] 为 3 和 x[0] 为 1。您现在应该会收到一个错误,例如传递的参数不足。

        解决办法:

        对于这种特殊情况:

        print(t[1], t[0][0], t[0][1])
        

        您也可以在 t[0] 中运行 for 循环:

        for i in t[0]:
            print " %s %s %s" % (t[1], i[0], i[1]) 
        

        最后,您还可以将嵌套元组转换为平面元组,然后以较少的混乱进行迭代,因为您需要担心一个较小的维度。

        【讨论】:

          猜你喜欢
          • 2016-02-10
          • 2019-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-15
          • 1970-01-01
          相关资源
          最近更新 更多