【问题标题】:why can't I print a single tuple from a list?为什么我不能从列表中打印单个元组?
【发布时间】:2018-11-24 02:21:46
【问题描述】:

我只是想翻转并打印列表中的第一个元组。 如果我尝试此代码,我会收到错误“无法解压缩不可迭代的 int 对象”

lst = [('a',1),('b',2),('c',3)]
for x,y in lst[0]:
    print(y,x)

但是,如果我进行这个简单的编辑,它就可以正常工作。为什么我不能从列表中打印单个元组?

lst = [('a',1),('b',2),('c',3)]
for x,y in lst[:1]:
    print(y,x)

【问题讨论】:

  • 你为什么要迭代?
  • 因为在lst[0] 中,您按整数索引列表,返回单个元素,但在lst[:1] 中,您按切片索引列表,返回可以迭代的列表。
  • print(lst[0][1], lst[0][0]).

标签: python


【解决方案1】:

您的清单:

lst = [('a',1),('b',2),('c',3)]

列表的第一个元素:

>>> lst[0]
(1, 'a')

然后,当您对此进行迭代时,您要求解包每个元素。这就像写作

for x, y in 1:
    # do something
for x, y in 'a':
    # do something

使用lst[:1],您正在切片列表,并返回一个元组列表。

【讨论】:

    【解决方案2】:

    翻转第一个元素的最简单方法是:

    lst = [('a',1),('b',2),('c',3)]
    print((lst[0][1], lst[0][0])) # -> (1, 'a')
    

    但是,您的代码在这里抛出错误的原因是因为您尝试迭代元素而不是列表,其中元素是 ('a',1) 通过迭代它第一个值是 'a' 并且您尝试将其拆分为 2 个变量 @987654324 @ 和 y 会引发错误。

    print(type(lst[0])) # -> <class 'tuple'>
    for x,y in lst[0]:
        print(y,x)
    

    如果我们迭代列表[('a',1)](因为我们使用切片作为列表索引而不是整数)第一个值确实是('a',1),我们可以将其拆分为xy变量而不会出错。

    print(type(lst[:1])) # -> <class 'list'>
    for x,y in lst[:1]:
        print(y,x)
    

    【讨论】:

      【解决方案3】:

      您正在尝试遍历列表的第一个元素。 只需解压缩第一个元素并打印:

      x, y = lst[0]
      print(y,x)
      

      或在循环中:

      for x, y in lst:
          print(y, x)
      

      【讨论】:

        【解决方案4】:

        你不希望那里有一个循环。 lst[0] 是你要翻转的元组,不需要迭代。

        x, y = lst[0]
        print(y, X)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-09-28
          • 1970-01-01
          • 1970-01-01
          • 2016-02-01
          • 2020-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多