【问题标题】:Python get second item from each internal listPython从每个内部列表中获取第二项
【发布时间】: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


【解决方案1】:

我认为问题一定与您的其他代码有关。我刚刚运行了以下内容:

x = [[2, 3, 4], [5, 6, 7]]
print([item[1] for item in x])

[3,6]

for item in x:
    print(item)

[2, 3, 4]

[5,6,7]

for item in x:
    print(item[1])

3

6

您发布的所有代码都运行良好,没有错误。您必须以某种方式更改未发布的列表。我建议您在处理它之前尝试print(x),以确定实际结构是什么样的,然后从那里进行相应的处理。

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多