不清楚是从匹配的行中请求值,还是需要这些行的索引。我假设你想要指数,这意味着我的答案与J.F.塞巴斯蒂安的答案明显不同,如果你想要这些值,这可能是最好的。在
如果确实需要索引,则不清楚如何处理多个匹配项。如果行[1]==行[2]==行[3],则可以获得[1,2]、[1,3]和[2,3]作为匹配索引,或者您可能只需要其中一个。我假设您只需要其中一个,而哪一个并不特别重要(下面的两个函数总是提供[1,2],而不是其他函数,尽管如果需要,可以修改它们以选择不同的对)。在
下面是一种类似的方法,它显式地循环索引,跳过已经匹配的索引:def findMatchedRowPairsWithoutDuplicates(rows):
matched = set()
result = []
for i in range(len(rows)):
if i in matched:
continue
for j in range(i+1, len(rows)):
if j in matched:
continue
if row[i] == row[j]:
result.append([i,j])
matched.add(i)
matched.add(j)
break # can't match with the current i again!
return result
这里有一个替代实现,它利用排序来更快地查找重复项(时间复杂度O(N log(N)),而不是O(N2),但它要求行值具有部分顺序(即必须定义row1 < row2)。对于大多数类型的数据库值来说,这可能是正确的,但可能并不总是由给定库的实现来保证。理解这段代码的关键在于,相等行的索引在排序后总是在indexes列表中是相邻的,所以我们只需要检查每个相邻的索引对,而不是检查所有的索引对。在
^{pr2}$