使用范围双重列表推导式

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

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

任何帮助都将不胜感激。谢谢!

6个回答

2

如果myList至少包含5个元素,并且您确实想使用列表推导式,请尝试以下代码:

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

2

mylist[:5] 给出了 mylist 的前五个元素。(如果 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)] - 请仔细阅读。 - akaRem

1

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

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

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

因此,它正在访问您的元组而不是列表。其他解决方案都展示了如何纠正这个问题,所以一定要为其中一个投票 - 这将有助于弄清楚为什么会导致错误 :)

0

您正在尝试访问超出范围的索引。

这意味着您的x元组长度小于5。

这种情况发生在像[[1,2,3],[4,5,6]..]这样的数据中。

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

当您尝试x[5]时,会出现异常。


0

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

虽然@unutbu的方法更易读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接