如何在不使用内置排序功能的情况下,基于元素按字母顺序对2D数组进行排序? (蟒蛇)

时间:2014-06-08 05:00:18

标签: python arrays sorting recursion arraylist

我已经坚持了一段时间,有人可以帮助我吗?

假设我有一个数组:

[[231,cow,234334,2231319,323242],[3,alien,2,2312,3212],[9,box,234,2319,3242]]

有人可以帮我创建一个排序函数,该函数根据较大数组中每个单独数组的第二个元素按字母顺序对数组进行排序,使其看起来像:

[[3,alien,2,2312,3212],[9,box,234,2319,3242],[231,cow,234334,2231319,323242]]

3 个答案:

答案 0 :(得分:1)

sort(array, key=lambda x: x[1])

如果您不想使用内置函数,只需创建自己的键控排序函数,然后像上面那样调用它。

答案 1 :(得分:0)

Mergesort易于实施。它是一个divide-and-conquer算法,将问题分解为更小的部分(排序左半部分,右半部分,并将它们组合起来)。

a = [[231,'cow',234334,2231319,323242],[3,'alien',2,2312,3212],[9,'box',234,2319,3242]]

def merge_sort(a):
    # copy the original array so it's unaffected
    b = a[:]
    # if there are 2 or fewer elements, just compare and return in the right order
    if len(b) < 2:
        return b
    elif len(b) == 2:
        x,y = b
        if x[1] <= y[1]:
            return b
        else:
            return [y,x]
    # if there are more than 2, break it to 2 sub-arrays and recursively sort both
    else:
        m = int(len(b)/2)
        p1 = merge_sort(b[:m])
        p2 = merge_sort(b[m:])
        rs = []
        # then combine them by repeatedly popping the smaller one
        while len(p1) > 0 or len(p2) > 0:
            if len(p1) == 0:
                rs.append(p2.pop(0))
            elif len(p2) == 0:
                rs.append(p1.pop(0))
            elif p1[0][1] <= p2[0][1]:
                rs.append(p1.pop(0))
            else:
                rs.append(p2.pop(0))
        return rs

print merge_sort(a)

答案 2 :(得分:0)

这是一个简单的冒泡排序,这是最容易理解的排序之一(因为这看起来像家庭作业。)我认为,关键是教师试图让你思考2D方面,这里意味着您需要查看比较中第二列的第二个元素。我为此修改了比较。我只是测试了它,你需要在字符串元素周围加上引号。

   def bubblesort( A ):
     for i in range( len( A ) ):
       for k in range( len( A ) - 1, i, -1 ):
         if ( A[k][1] < A[k - 1][1] ):
           swap( A, k, k - 1 )

   def swap( A, x, y ):
     tmp = A[x]
     A[x] = A[y]
     A[y] = tmp

   A=[[231,'cow',234334,2231319,323242],[3,'alien',2,2312,3212],[9,'box',234,2319,3242]]
   print A
   bubblesort(A)
   print A