对列表中的奇数进行排序

时间:2017-06-09 15:08:20

标签: python

如何对整数列表中的奇数进行排序,但将偶数保留在原始位置?

示例:

sortArray([5, 3, 2, 8, 1, 4]) == [1, 3, 2, 8, 5, 4]

我的代码:

def sort_array(source_array):     
    odd_numbers = [n for n in source_array if n%2!=0]
    odd_numbers = sorted(odd_numbers)

如何将source_array中奇数的索引与odd_numbers中的奇数转换?

4 个答案:

答案 0 :(得分:10)

看起来你几乎就在那里 - 你可以使你的排序奇数成为可迭代的,并使用原始偶数或下一个排序的奇数重建你的源列表,例如:

    float(tradedQty/1e6)
//        ^^^^^^^^^ ^^^
//        string  float
//  ^^^^^
// too late

答案 1 :(得分:2)

更多行但更具可读性

a = [5, 3, 2, 8, 1, 4]
b = sorted([item for item in a if item%2 != 0])
odd_int = 0
for i in range(len(a)):
    if a[i] %2 != 0:
        a[i] = b[odd_int]
        odd_int += 1

答案 2 :(得分:0)

如果您打开使用numpy,可以使用np.where获取奇数的索引,对奇数进行排序,并使用先前获得的索引更新数组,分配给奇数的排序数组:

function execute() {
    ( echo prepare_something ; cat ) | ssh user@host /bin/bash
}

答案 3 :(得分:0)

def sort_array(source_array):
    odd_numbers = sorted([n for n in source_array if n%2!=0])
    c = 0
    res = []
    for i in source_array:
        if i %2!=0:
            res.append(odd_numbers[c])
            c += 1
        else:
            res.append(i)
    return res