【发布时间】:2019-03-05 21:22:00
【问题描述】:
我有一个包含内部列表的列表(从逗号分隔的文件中读取),我想获得其中的第二项。例如在x = [[2,3,4][5,6,7]] 我想得到3 和6。简单的东西,我以为我知道该怎么做。我知道我可以尝试使用以下方法来获取第二个数字:
fp = open('random.txt')
x = list(fp.read().split("\n"))
x.pop(0) #header line
x = [item.split(",") for item in x]
print([item[1] for item in x])
我的问题是,我可以通过在上面的代码中执行item[0] 来获得第一项,并且效果很好。但是,如果我尝试item[1],则会收到列表索引超出范围错误。我尝试在正常的 for 循环中测试我的列表是否正确。
for item in x:
print(item[1])
这最终运行良好,现在我知道如果我真的想要也可以使用第二个版本,但我想知道为什么第一个版本在第二个版本中运行良好时会出现错误?
编辑:包括我的其余代码
【问题讨论】:
-
你的列表理解很好。不知道你为什么会出错。确保所有子列表至少有 2 个元素并且您正确拆分列表
-
您的编辑使您的问题完全不同。您可能有不包含逗号的行。如果没有会显示该问题的样本数据,我们无法提供更多信息。
-
\n 在最后一个数据行之后 - 之后的行没有
,所以也没有 [1] ... -
print([item[1] for item in x if len(x) > 1] )修复它 -
无法复制。我注意到您混淆了变量名称并用不同的结构覆盖它们。可能错误发生在您更改其中一个没有明确名称的变量之前/之后,而不是您在此问题中提出的位置。
标签: python python-3.x list for-loop jupyter-notebook