我正在尝试解决这个问题,其中,我只需要对数组(python列表)的奇数进行排序,并将偶数编号为。
我想要解决这个问题:
我的代码:
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)
答案 0 :(得分:0)
可变类型的方法通常会使对象变异并返回None
而不是返回已修改的对象。将此与不可变类型(例如str
)的方法进行对比,必须返回修改后的对象。
答案 1 :(得分:0)
你很亲密。 list.sort
执行就地排序并返回None
。 &#34; Python化&#34;修改对象的API通常不会返回该对象。大多数程序都不会使用该对象,因此它只是引用计数的无意义增量和减量。请改用sorted
return sorted(odd_arr).extend(even_arr)
你也可以放弃filter
和lambda
生成器的东西
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