3

我在 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 列表。由于这是我的索引,因此我在此之前嵌套了另一个列表理解语句,以在我的特定列表上执行此操作。

任何帮助表示赞赏。谢谢!

4

6 回答 6

2

mylist[:5]给出 的前 5 个元素mylist。(如果mylist其中的元素少于 5 个,mylist[:5]则将返回一个长度列表len(mylist)。)在这里使用列表推导式将是矫枉过正。

于 2012-12-08T00:31:34.687 回答
2

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

[print (mylist[i]) for i in range (0, 5)]
于 2012-12-08T00:38:53.547 回答
1

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

[mylist[i] for i in range(5)]
于 2012-12-08T00:36:43.000 回答
1

至于为什么会出现错误,如果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]) 

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

于 2012-12-08T00:40:04.027 回答
0

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

它发生在像这样的数据上[[1,2,3],[4,5,6]..]

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

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

于 2012-12-08T00:33:23.753 回答
0

打印 [mylist[j] for j in [ i for i in range(5)]]

尽管@unutbu 的方法更具可读性。

于 2012-12-08T00:37:41.920 回答