找到列表列表中的所有元素位置

时间:2019-10-15 03:41:29

标签: python

鉴于l = [[1,2,3],[3,4,5],[5,6]],有一种方法可以返回一个列表,该列表包含l中所有3的位置;即返回[2,3]。我编写的示例代码是:

def pos_in_lists(seq, elem):
    while i < len(seq):
        elem_pos = seq[i].index(elem)
        return [elem_pos]

运行此命令时,它仅返回2,这不是我想要的结果。我怎么了另外,有没有更简单的方法来解决我的问题?

3 个答案:

答案 0 :(得分:0)

  1. 您需要在每个循环中增加“ i”

  2. “返回”强制循环退出。那应该在代码末尾的循环之外。

答案 1 :(得分:0)

您的代码仅返回一个包含一个元素(return [elem_pos])的列表。您需要在循环外部添加一个列表变量(result),以通过附加到该列表来跟踪先前列表的结果。

def pos_in_lists(seq, elem):
    result = []
    i = 0
    while i < len(seq):
        if elem in seq[i]:
            elem_pos = seq[i].index(elem)
            result.append(elem_pos)
        i += 1
    return result

另一个更简单的选择是使用列表理解

def pos_in_lists(seq, elem):
    return [l.index(elem) for l in seq if elem in l]

答案 2 :(得分:0)

根据我对问题的理解,给定列表l = [[1,2,3],[3,4,5],[5,6]],如果我们必须找到3,则输出列表应是[2,0]。

提供的代码中存在以下错误:

  • 该代码无法正常工作,因为在使用该方法之前,我未在您的方法中定义我。
  • 我们需要存储列表中所有3个值的位置,因此我们需要有一个列表,其中存储了我们可以在列表中找到的所有3个位置。找到一个值后,您将立即返回结果。因此,您只得到2。
  • seq [i] .index(elem)如果列表中没有3,将抛出值错误。

    解决方案

    def pos_in_lists(seq,elem):

    res = []
    for innerList in seq:
        if elem in innerList:
            res.append(innerList.index(elem))
    return res
    

    pos_in_lists(l,3)

结果为[2,0]

我们也可以使用列表理解:

def pos_in_lists(seq, elem):
    return [innerList.index(elem) for innerList in seq if elem in innerList]