【问题标题】:Double list Comprehension with range带范围的双重列表理解
【发布时间】:2012-12-08 00:28:07
【问题描述】:

我在 Python 中有一个列表,我正在尝试使用列表推导从中打印出前五个元素。

我知道这必须使用双重列表推导来完成。我目前有以下内容:

print [[x[i] for x in mylist] for i in range(0,5)]

这会引发以下错误:IndexError: tuple index out of range

当我单独打印每一个时,效果很好。我做print mylist[0]print mylist[1] 等等...

这里有什么问题?我有一种感觉,我的整个双重理解都不正确。现在这是我的想法:

[x for x in range(0,5)]

这将为范围 (0,5) 中的每个 x 创建一个 x 列表。由于这是我的索引,因此我在此之前嵌套了另一个列表理解语句,以在我的特定列表上执行此操作。

感谢任何帮助。谢谢!

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    mylist[:5] 给出mylist 的前 5 个元素。 (如果mylist 中的元素少于5 个,那么mylist[:5] 将返回一个长度为len(mylist) 的列表。)在这里使用列表推导式会有点过头了。

    【讨论】:

    • 您建议替代 [[x[i] for i in range(0,5)] for x in mylist] 而不是 [[x[i] for x in mylist] for i in range(0,5)] - 请仔细阅读。
    【解决方案2】:

    如果myList 至少包含 5 个元素,并且你真的想使用列表推导,试试这个:

    [print (mylist[i]) for i in range (0, 5)]
    

    【讨论】:

      【解决方案3】:

      unutbu 是最好的解决方案。使用列表推导来执行它,你会想要

      [mylist[i] for i in range(5)]
      

      【讨论】:

        【解决方案4】:

        至于为什么会报错,如果myList是一个元组列表,可以这样看:

        myList = [(0, 1), (1, 2), (2, 3)]
        
        result = []
        for i in range(5):
            sub_result = []
            # Here x will be (0, 1), etc.
            for x in myList:
                # Here you are referencing the ith element of your tuple
                # If your tuple doesn't contain that many elements, you get the error
                sub_result.append(x[i]) 
        

        因此它正在访问您的元组而不是您的列表。其他解决方案都显示了如何纠正这个问题,所以一定要投票给他们 - 希望这有助于找出导致错误的原因:)

        【讨论】:

          【解决方案5】:

          print [mylist[j] for j in [ i for i in range(5)]]

          虽然@unutbu 的方法更具可读性。

          【讨论】:

            【解决方案6】:

            您正在尝试访问超出范围的索引。 这意味着您的 x 元组的长度

            [[1,2,3],[4,5,6]..] 之类的数据会发生这种情况

            这里的x 是[1,2,3],然后是[4,5,6] 等等

            当你尝试x[5] - 你会得到异常

            【讨论】:

              猜你喜欢
              • 2015-08-21
              • 1970-01-01
              • 1970-01-01
              • 2014-05-12
              • 1970-01-01
              • 2021-08-22
              • 1970-01-01
              • 2010-11-14
              相关资源
              最近更新 更多