Python 比较数组与索引

Python 比较数组与索引,python,arrays,Python,Arrays,我需要一种以最快的方式比较多个数字数组的方法。例如,我有 [1, 2, 3, 4] [2, 2, 3, 1] [2, 2, 2, 3] [1, 2, 3, 3] 排序如下:最重要的元素位于索引0处,因此索引0处值为1的所有数组都位于索引0处值为2的数组之前。如果索引0相同,则使用索引1比较两个数组 sorted_arrays = sorted(arrays, key: lambda x: x) 做我想做的事,但速度相当慢。我认为这是对所有元素的两两比较,并没有比我提出的另一个简单实现快多少:

我需要一种以最快的方式比较多个数字数组的方法。例如,我有

[1, 2, 3, 4]
[2, 2, 3, 1]
[2, 2, 2, 3]
[1, 2, 3, 3]
排序如下:最重要的元素位于索引0处,因此索引0处值为1的所有数组都位于索引0处值为2的数组之前。如果索引0相同,则使用索引1比较两个数组

sorted_arrays = sorted(arrays, key: lambda x: x)
做我想做的事,但速度相当慢。我认为这是对所有元素的两两比较,并没有比我提出的另一个简单实现快多少:

class Array(object):
    def __init__(self, values):
        self.values = values

    def __cmp__(self, other):
        for arr1, arr2 in itertools.izip(self.values, other.values):
            if arr1 < arr2:
                return -1
            elif arr1 > arr2:
                return 1
        return 0

arrays = sorted([
   Array([1, 2, 3, 4]),
   Array([2, 2, 3, 1]),
   Array([2, 2, 2, 3]),
   Array([1, 2, 3, 3])
])
类数组(对象):
定义初始值(自身,值):
self.values=值
定义cmp(自身、其他):
对于itertools.izip(self.values,other.values)中的arr1和arr2:
如果arr1arr2:
返回1
返回0
数组=已排序([
数组([1,2,3,4]),
数组([2,2,3,1]),
数组([2,2,2,3]),
数组([1,2,3,3])
])

是否有一种更快的方法来执行此操作(无需将每个数组与另一个数组(可能是数组的所有元素)进行比较)?

“…但速度相当慢。”您是否尝试过不指定
参数?你试过分类吗?没有。默认情况下,
sorted()
是这样对数组排序的吗?不,我也没有尝试过。Python的排序例程已经使用元素作为键。添加一个identity
参数只会降低执行速度,因为每个元素都会调用该函数。想想看:
lambda x:x
是一个接受
x
然后立即返回的函数。为什么首先要将其发送到函数?它不会改变任何东西。我经常参考教程和文档。“…但速度相当慢。”您是否尝试过不指定
参数?你试过分类吗?没有。默认情况下,
sorted()
是这样对数组排序的吗?不,我也没有尝试过。Python的排序例程已经使用元素作为键。添加一个identity
参数只会降低执行速度,因为每个元素都会调用该函数。想想看:
lambda x:x
是一个接受
x
然后立即返回的函数。为什么首先要将其发送到函数?我经常参考教程和文档。