[codewars][Python] 把列表中的奇数值按照从小到大的方式排列,偶数值的位置不变

my code:

基本思想:

1) 把相邻的两个奇数元素进行比较,大的向后移

2)按照这个方式执行奇数元素个数次

def sort_array(source_array):
    # Return a sorted array.
    num_odd = 0
    for i in source_array:
        if i %2 !=0:
            num_odd +=1
        else:
            pass

    for m in range(num_odd-1):
        for each in source_array:
            if each %2 == 0:      #是偶数
                pass
            else:                 #是奇数
                index = source_array.index(each)   #返回这个奇数对应的index
                for each2 in source_array[index+1:]:
                    if each2%2 ==0:
                        pass
                    else:
                        index2 = source_array.index(each2,index+1)
                        if(each > each2):
                            temp = source_array[index]
                            source_array[index] = source_array[index2]
                            source_array[index2] = temp
                            break
                        else:
                            pass
        print(source_array)
    return source_array

smart code:

基本思想:

1)把列表中的奇数元素抽取出来,生成一个新的列表,并从大到小排列

2) 整理原列表,如果为偶数,则pass,如果为奇数,则从步骤1中的元素中取出一个

def sort_array(arr):
  odds = sorted([x for x in arr if x %2!=0],reverse = True)
  print(odds)
  result = [x if x%2==0 else odds.pop() for x in arr]
  return result

另一种解法:

基本思想:

1)把奇数元素抽出来生成一个新的列表,并从小到大排列

2)生成一个包含原列表偶数元素的新列表,奇数元素的位置用“x”代替

3)把x的位置换成奇数元素

def sort_array(source_array):
    odds = []
    answer = []

    for i in source_array:
        if i % 2 > 0:       #列表中的元素是奇数
            odds.append(i)
            answer.append("X")

        else:               #列表中的元素是偶数
            answer.append(i)
    odds.sort()

    for i in odds:
        x = answer.index("X")
        answer[x] = i
    return answer

另一种解法:

def sort_array(source_array):
    '''基本思路:
    将所有的奇数元素取出,生成一个新的列表odd
    对原列表进行处理,建立一个新列表,如果元素是奇数,就用odd中的元素代替,如果是偶数,就保持不变
    '''
    odd = sorted(list(filter(lambda x: x % 2, source_array)))      #将偶数元素筛选出去
    l, c = [], 0
    for i in source_array:
        if i in odd:
            l.append(odd[c])
            c += 1
        else:
            l.append(i)
    return l

 

你可能感兴趣的:(codewars)