我在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列表。因为这是我的索引,所以我在上面之前嵌套了另一个列表理解语句,以便在我的特定列表上执行此操作。
感谢任何帮助。谢谢!
答案 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的方法更具可读性。