双列表理解范围

时间:2012-12-08 00:28:08

标签: python list list-comprehension

我在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)]

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

感谢任何帮助。谢谢!

6 个答案:

答案 0 :(得分:2)

mylist[:5]给出mylist的前5个元素。 (如果mylist中包含的元素少于5个,那么mylist[:5]将返回一个长度为len(mylist)的列表。)在此处使用列表解析会有点过分。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果myList包含至少5个元素,并且您真的想使用列表理解,请尝试以下方法:

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

答案 3 :(得分: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]) 

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

答案 4 :(得分:0)

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

适用于[[1,2,3],[4,5,6]..]

等数据

x此处为[1,2,3],然后为[4,5,6]

当你尝试x[5]时 - 你得到了例外

答案 5 :(得分:0)

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

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