<p>我对尚的回答做了以下扩展。它考虑了两个值相同时所涉及的特殊事实。简单地对列表进行排序和比较可能会得出错误的结果。例如,如果列表1中的顺序是0<;1<;2,而列表2中的顺序是0<;1<;=2,那么对第二个列表排序可能会得到[0,1,2]和[0,2,1]的结果,在最后一种情况下,shang的方法将失败。这取决于排序例程的行为。在</p>
<pre><code>import operator
def order_indexes(l):
tmp = list(enumerate(l))
tmp.sort(key=operator.itemgetter(1))
return map(operator.itemgetter(0), tmp)
def are_compatible(l1, l2):
# Order one list, retaining the indexes
ordered = order_indexes(l1)
# For each pair of indexes on the list
for i in xrange(len(ordered) - 1):
pair = (ordered[i], ordered[i + 1])
# See if the pairs in the other list are compatible
# If a1 <= b1 then a2 must be <= b2
if l2[pair[0]] > l2[pair[1]]:
return False
# If all pairs are compatible, then the lists are compatible
return True
if __name__ == '__main__':
l1 = [1,3,4,5,2]
l2 = [1,3,5,5,1]
l3 = [1,2,3,4,5]
l4 = [1,2,4,2,5]
print "L1 X L2 ",are_compatible(l1, l2)
print "L2 X L1 ",are_compatible(l2, l1)
print "L3 X L4 ",are_compatible(l3, l4)
print "L4 X L3 ",are_compatible(l4, l3)
</code></pre>