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]])
不起作用。
我需要改进功能。
您的代码假定
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