排序方法列表类

时间:2018-04-26 00:41:21

标签: python python-3.x

我正在尝试解决这个问题,其中,我只需要对数组(python列表)的奇数进行排序,并将偶数编号为。

我想要解决这个问题:

  1. 将奇数和偶数过滤成单独的列表。
  2. 对奇数数组进行排序,最后用偶数数组扩展它。
  3. 我的代码:

    def sort_array(source_array):
        # Return a sorted array.
        odd_arr = list(filter(lambda x: x % 2 != 0, source_array))
        even_arr = list(filter(lambda x: x % 2 == 0, source_array))
    
        return odd_arr.sort().extend(even_arr)
    

    面临的问题:Python抛出AttributeError

    跟踪:

       Traceback (most recent call last):
      File "main.py", line 3, in <module>
     Test.assert_equals(sort_array([5, 3, 2, 8, 1, 4]), [1, 3, 2, 8, 5, 4])
    File "/home/codewarrior/solution.py", line 8, in sort_array
      return odd_arr.sort().extend(even_arr)
    AttributeError: 'NoneType' object has no attribute 'extend'
    

    现在只要我print(odd_arr)我获得了列表,但是当我print(odd_arr.sort())时,我得到了一个NoneType对象。我的印象是排序和扩展是列表类方法。我哪里错了?这必须是我自己做的。

    编辑: 更改了代码

    def sort_array(source_array):
        odds = [n for n in source_array if n % 2 != 0]
        evens = [n for n in source_array if n % 2 == 0]
        print(odds) # List
        print(evens) # List
        print(sorted(odds).extend(evens)) # None
        return sorted(odds).extend(evens)
    

2 个答案:

答案 0 :(得分:0)

可变类型的方法通常会使对象变异并返回None而不是返回已修改的对象。将此与不可变类型(例如str)的方法进行对比,必须返回修改后的对象。

答案 1 :(得分:0)

你很亲密。 list.sort执行就地排序并返回None。 &#34; Python化&#34;修改对象的API通常不会返回该对象。大多数程序都不会使用该对象,因此它只是引用计数的无意义增量和减量。请改用sorted

return sorted(odd_arr).extend(even_arr)

你也可以放弃filterlambda生成器的东西

def sort_array(source_array):
    arr = sorted(x for x in source_array if not x % 2).extend(
        x for x in source_array if x % 2)
    return arr