【问题标题】:Get single elements from nested list based on index position indecated of the value in a second list根据第二个列表中值的索引位置从嵌套列表中获取单个元素
【发布时间】:2018-10-16 06:45:12
【问题描述】:

作为一个更大项目的最后一部分,这是我想要解决的问题:

我有一个列表列表,我需要根据第二个列表的值提取其中的一个元素。

a = [[6,2,3,9], [10,19,14,11], [27,28,21,24]]

b = [0,2,2]

b 中的值表示子列表中元素的位置。此外,b 中的索引对于列表a 中的元素的索引是正确的。

我要找的结果是:

c = [6, 14, 21]

我已经尝试了很多版本:

c = [i[j] for i in a for j in b]

但结果我得到了一个包含所有列表的所有元素的列表,如下所示:

c = [6, 3, 3, 10, 14, 14, 27, 21, 21]

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    通过使用嵌套循环,您将a 中的每个 元素与b 中的每个 元素组合在一起。你想要的是pair-wise迭代,使用zip:

    c = [x[y] for x, y in zip(a, b)]
    # [6, 14, 21]
    

    这大致相当于:

    c = [a[i][b[i]] for i in range(min(len(a), len(b)))]
    

    【讨论】:

    • 谢谢!!!我以前没有以这种方式使用 zip。但这似乎确实是一种快速而简单的方法。
    【解决方案2】:

    或者:

    [v[b[i]] for i,v in enumerate(a)]
    

    例子:

    >>> a = [[6,2,3,9], [10,19,14,11], [27,28,21,24]]
    >>> b = [0,2,2]
    >>> [v[b[i]] for i,v in enumerate(a)]
    [6, 14, 21]
    >>> 
    

    【讨论】:

      【解决方案3】:

      试试这个:

      c = [a[i][b[i]] for i in xrange(len(b))]
      

      【讨论】:

      • 或者我们可以使用 enumerate(b)
      • 这太不像pythonic了
      • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和文档链接。如果没有围绕它的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案。
      【解决方案4】:

      您可以尝试以下方法。

      a = [[6,2,3,9], [10,19,14,11], [27,28,21,24]]
      b = [0,2,2]
      c = []
      for i in range(0, len(b)):
          c.append(a[i][b[i]])
      print (c)
      

      【讨论】:

      • 这简直太不像pythonic了
      • 是的,但这只是一个选项,对于新手来说更容易开始:)
      猜你喜欢
      • 2014-01-09
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2020-04-08
      相关资源
      最近更新 更多