【问题标题】:Retrieve a range of values from list从列表中检索一系列值
【发布时间】:2020-06-14 04:30:47
【问题描述】:

我想知道我是否有这样的列表:

a = [[43,76],[8,3],[22,80],[71,9]]

如果我想检索最后 3 个子列表中的第二个值,即索引 1 到 3 中的第二个值是这样的:

a[1:3][1]:

3
80
9

【问题讨论】:

标签: python list data-retrieval


【解决方案1】:

不,这样评估:

a[1:3][1] -> [[8, 3], [22, 80]][1] -> [22, 80]

注意:3 表示索引 3(不包括它),所以实际上你的切片应该是a[1:4],但是你想要最后三个子列表,而不是 第二到第四 个子列表,您应该使用负片:a[-3:]。即使列表只能是 4 长,这也更清楚。

所以你想要[x[1] for x in a[-3:]]

如果您想在示例输出中打印它们:

>>> for x in a[-3:]:
...     print(x[1])
... 
3
80
9

【讨论】:

  • 不知道为什么投反对票...感谢任何反馈。
【解决方案2】:

您可以在此处使用负切片

print(*[x[1] for x in a[-3:]],sep='\n') #a[-3:] gives last 3 elements

【讨论】:

    【解决方案3】:

    我的 2c:

    [x[1] for x in a[-3:]]
    

    [3, 80, 9]
    

    Demo

    【讨论】:

      【解决方案4】:

      正如大多数其他答案所建议的那样,最简单的方法可能是:

      [x[1] for x in a[-3:]]
      

      但是,为了练习和习惯于解决涉及列表(和其他)问题的其他方法,最好阅读 mapfilterreduce 所做的事情(假设它不是已经知道)。一个小的描述是here

      我想我会把这个答案留在这里以添加到其他答案中。这是使用map 的另一种方法。

      [*map(lambda x: x[1], a[-3:])]
      
      Output: [3, 80, 9]
      

      希望这会有所帮助。

      【讨论】:

      • 不知道为什么这被否决了,以及这个问题中的一些其他有效答案。请提供反对票的解释。
      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 2020-04-11
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2021-09-20
      相关资源
      最近更新 更多