我得到了一个列表列表,其中恰好包含一个与其他列表不同的列表。
我尝试用这段代码解决这个问题:
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 处时也能正常工作?
您的代码假定
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