【问题标题】:Best way to get second item of each list inside of a 2D list获取二维列表中每个列表的第二项的最佳方法
【发布时间】:2022-11-25 15:41:10
【问题描述】:

我有一个二维列表:

items = [['a','b'],['c','d']]

我想获得一个包含每个嵌套列表的最后一个元素的新列表:

new_list = ['b','d']

我可以这样做:

new_list = []
for i in items:
   new_list.append(i[-1])

但是对于这么简单的事情,这感觉很笨拙。我想知道是否有更优雅的方法来做到这一点。

【问题讨论】:

  • 你的榜样是我将如何实现这一目标。也许 lambda 函数可以做得更好,但 IMO 不太清楚。
  • 规范的方式是列表理解:new_list = [item[1] for item in items]
  • 使用这个脚本new_list = [i[-1] for i in items]
  • 使用 lambda list(map(lambda x:x[1], items))

标签: python list


【解决方案1】:

如果你有...

items = [
    ['a', 'b'],
    ['c', 'd']
]

...您有一个可以通过这种方式访问​​的嵌套列表:

>>> items[0]
['a', 'b']
>>> items[0][0]

要获得每个子列表的第二个元素(索引为1 的元素),我建议列表理解:

new_list = [sublist[1] for sublist in items]

如果你想要每个子列表的最后一个元素(索引为-1的元素),你只需要更改索引:

new_list = [sublist[-1] for sublist in items]

对于您显示的列表,这两行将给出相同的列表,但是当子列表具有两个以上的元素时,两种解决方案将给出不同的结果。


您可以阅读有关列表理解的更多信息 herehere

【讨论】:

    【解决方案2】:

    从可读性的角度来看,我可能会将可迭代拆包与列表理解结合起来,比如 -

    new_list = [second for first, second, *rest in items]
    

    在子列表只有 2 个项目的这种情况下,*rest 并不是真正需要的,但有助于概括。

    【讨论】:

    • 我不知道这行得通,+1
    【解决方案3】:

    你可以做

    new_list = [i[-1] for i in items]
    

    【讨论】:

    • 我建议使用索引 1 而不是 -1,因为问题是要求“第二项”而不是最后一项,即使子列表的长度为 2。
    • 这个问题实际上不清楚@FLAK-ZOSO——他们在正文中说the last character
    • 是的,谢谢你让我注意到它,我正在编辑我的答案。
    • @FLAK-ZOSO 你是对的,我正在查看问题主体和示例代码,看起来更像是 OP 想要获取最后一个元素。可能应该更改问题标题以匹配实际问题。
    【解决方案4】:

    使用列表理解:

    items = [['a','b'],['c','d']]
    
    new_list = [item[1] for item in items] # where 1 in item[1] is the index of last element or you can use -1
    
    print(new_list) # ['b', 'd']
    

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多