识别出奇数的列表,并从给定列表中找到其索引

问题描述 投票:0回答:1

我得到了一个列表列表,其中恰好包含一个与其他列表不同的列表。

我尝试用这段代码解决这个问题:

a = [[1, -2], [1, -2], [1,6], [1, -2], [1, -2]]
     
def find_idx(lists):
     for i in range(len(lists)-1):
          diff = np.array(lists[0])-np.array(lists[i+1])
          for k in diff:
               if k != 0:
                    print(i+1)
find_idx(a)

上述函数对于大多数输入都适用,但是当奇数个输出位于索引 0 时,它会返回错误的结果。

例如,使用以下输入:

(lists = [[1, 6],[1, -2], [1, -2], [1, -2], [1, -2]])

我打印了所有索引,除了我真正应该得到的索引 (0)。

如何修复我的函数,使其在不同列表位于索引 0 处时也能正常工作?

python list function for-loop
1个回答
0
投票

您的代码假定

lists[0]
是重复的“正常”值(列表),因为您在
diff
表达式中将任何其他元素与它进行比较。但是,如果您发现索引 1 处的条目与索引 0 处的条目不同,您还无法知道哪一个是奇数。在这种情况下,您需要与列表中的另一个元素(例如最后一个元素)进行额外的比较。

不是你的问题,而是:

  • 您不需要 numpy 或那个

    diff
    表达式来比较两个整数列表。在 Python 中,您可以将此类列表与
    ==
    进行比较。

  • 当函数不打印结果而是返回结果时,它会更有用。

这里我以最后一条作为参考值,如果第一个恰好不同,则有两种可能:要么第一个是奇数,要么是最后一个。与第二个条目进行比较可以看出区别:

def find_idx(lists):
    reflist = lists[-1]
    for i, lst in enumerate(lists):
        if lst != reflist:
            # when i == 0 we don't have enough information yet: make another comparison
            if i == 0 and lists[1] != reflist:
                return len(lists) - 1
            return i
    return -1

调用示例:

a = [[0, 6], [1, -2], [1, -2], [1, -2], [1, -2], [1, -2]]
i = find_idx(a)
print(i)  # 0
© www.soinside.com 2019 - 2024. All rights reserved.