【问题标题】:How to extract data from a list of tuples which length could be variable如何从长度可变的元组列表中提取数据
【发布时间】:2020-07-08 17:08:10
【问题描述】:

我有一个包含多个元组的列表(项目的长度是可变的),我想提取一些位于元组内相同等级的特定数据。

让我给你看一个例子。让我们处理这个包含 3 个元组的列表:

x = [
    ('a1', 'b2', 'c3', 'd4'), 
    ('e5', 'f6', 'g7', 'h8'), 
    ('i9', 'j10', 'k11', 'l12')
]

我想检索每个元组的第四项。我在While 循环中使用列表的长度:

y = len(x)
while y > 0:
    print(x[0][3])
    y = y - 1

我得到的结果是:

d4
d4
d4

但我想要以下结果:

d4
h8
l12

有没有办法将[0] 替换为此部分print(x[0][3]) 中的y 变量以获得我想要的结果?

【问题讨论】:

  • 您实际上是在打印print(x[0][3]),这是一个常量值,每次在循环中。
  • 是的。 print(x[y][3])
  • print(x[y][3]) 给了我这个 IndexError: list index out of range
  • @FrançoiseDionisi 那是因为y 倒数,您可以改为从 0 开始执行 while y < len(x),但 for 循环更有意义。
  • 是的。 y 开始是 x 的长度。 Python 使用 0 索引列表。范围内最大的索引是len(x) - 1

标签: python list tuples


【解决方案1】:

为此使用 for 循环会更自然:

for item in x:
    print(item[3])

您的代码不起作用的原因是因为您已对其进行硬编码以始终获取列表中的第一个元组,即在print(x[0][3]) 中,x[0] 中的0 需要是一个遍历您的变量的变量列表。如果您向上计数而不是向下计数,这会更容易,即

counter = 0
while counter < len(x):
    print(x[counter][3])
    counter += 1

但是当for 存在时使用while 确实没有意义。

【讨论】:

    【解决方案2】:
    for tup in x :
       print(tup[3])
    
    

    【讨论】:

    • 但不要使用tuple作为变量名:)
    • 是的,给变量命名可能是个坏习惯。但在这里它应该没有问题。
    • 谢谢。容易:)
    • 这里不会引起问题,但可能会导致一些非常奇怪的错误。你真的应该编辑答案并改变它。
    【解决方案3】:

    只需对它们进行简单的迭代,一旦完成,您将只得到如下所示的元组

    ('a1', 'b2', 'c3', 'd4')
    ('e5', 'f6', 'g7', 'h8') 
    ('i9', 'j10', 'k11', 'l12')
    

    一旦你在每个元组上获得它们的索引以获得最后一个值,如[-1][len(tuples) - 1] 以下是我的代码

    
    x = [
        ('a1', 'b2', 'c3', 'd4'), 
        ('e5', 'f6', 'g7', 'h8'), 
        ('i9', 'j10', 'k11', 'l12')
    ]
    
    read = [i[-1] for i in x]
    print(read)
    

    【讨论】:

      【解决方案4】:

      你可以试试这个:-

      y = len(x)
      while y>0:
          print(x[len(x)-y][3])
          y = y-1
      

      输出:-

      d4
      h8
      l12
      

      【讨论】:

        【解决方案5】:

        试试这个:

        [each_tuple[-1] for each_tuple in x]
        

        【讨论】:

          【解决方案6】:

          试试 for loop

          x = [
              ('a1', 'b2', 'c3', 'd4'), 
              ('e5', 'f6', 'g7', 'h8'), 
              ('i9', 'j10', 'k11', 'l12')
          ]
          
          for y in x:
              print(y[3])
          

          While loop

          c = len(x)-1
          while c>=0:
              print(x[c][-1])
              c-=1
              
          

          【讨论】:

          • @Gad 上面的代码是有效的,你为什么拒绝?
          • 拒绝是什么意思
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多