Python 交叉排序题

简介: 在计蒜客遇到的一道题: 输入一行 k 个用空格分隔开的整数,依次为 n1, n2 … nk。请将所有下标不能被 3 但可以被 2 整除的数在这些数字原有的位置上进行升序排列,此外,将余下下标能被 3 整除的数在这些数字原有的位置上进行降序排列。

在计蒜客遇到的一道题:

输入一行 k 个用空格分隔开的整数,依次为 n1, n2 … nk。请将所有下标不能被 3 但可以被 2 整除的数在这些数字原有的位置上进行升序排列,此外,将余下下标能被 3 整除的数在这些数字原有的位置上进行降序排列。

输出包括一行,与输入相对应的若干个整数,为排序后的结果,整数之间用空格分隔。


我的思路如下:

1.根据原列表下标判断,把列表的元素增添到新列表

2.新列表排序后

3.再根据原列表下标判断,把新列表增添到最后的列表输出


方法一:

list = [int(x) for x in raw_input().split(' ')]
list1 = []#You can't use "list1 = list2 = list3 = []" here!!!
list2 = []
list3 = []
list_sorted = []
num_list1 = num_list2 = num_list3 = 0
 
for x in range(len(list)):
    if (x+1) % 3 != 0 and (x+1) % 2 == 0:
        list1.append(list[x])
    elif (x+1) % 3 == 0:
        list2.append(list[x])
    else:
        list3.append(list[x])
list1 = sorted(list1)
list2 = sorted(list2, reverse = True)

for x in range(len(list)):
    if (x+1) % 3 != 0 and (x+1) % 2 == 0:
        list_sorted.append(list1[num_list1])
        num_list1 = num_list1 + 1
    elif (x+1) % 3 == 0:
        list_sorted.append(list2[num_list2])
        num_list2 = num_list2 + 1
    else:
        list_sorted.append(list3[num_list3])
        num_list3 = num_list3 + 1
print ' '.join(str(x) for x in list_sorted)
 
 

方法二:
list = [int(x) for x in raw_input().split(' ')]
list1 = []#You can't use "list1 = list2 = list3 = []" here!!!
list2 = []
list3 = []
list_sorted = []
num_list1 = num_list2 = num_list3 = 0
 
 
for x in list:
    if (list.index(x)+1) % 3 != 0 and (list.index(x)+1) % 2 == 0:
        list1.append(x)
    elif (list.index(x)+1) % 3 == 0:
        list2.append(x)
    else:
        list3.append(x)
list1 = sorted(list1)
list2 = sorted(list2, reverse = True)
for x in list:
    if (list.index(x)+1) % 3 != 0 and (list.index(x)+1) % 2 == 0:
        list_sorted.append(list1[num_list1])
        num_list1 = num_list1 + 1
    elif (list.index(x)+1) % 3 == 0:
        list_sorted.append(list2[num_list2])
        num_list2 = num_list2 + 1
    else:
        list_sorted.append(list3[num_list3])
        num_list3 = num_list3 + 1
print ' '.join(str(x) for x in list_sorted)
 
 
 
 

虽然做了出来,但我觉得方法还不完善,希望大家可以提提意见

目录
相关文章
|
1月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
184 0
在 Python 中,对列表进行排序有两种常用的方法
在 Python 中,对列表进行排序有两种常用的方法
|
10月前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
461 10
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
345 1
|
数据处理 Python
python遍历文件夹所有文件按什么排序
python遍历文件夹所有文件按什么排序
208 1
|
Python
Python中几种lambda排序方法
【9月更文挑战第7天】在Python中,`lambda`表达式常用于配合排序函数,实现灵活的数据排序。对于基本列表,可以直接使用`sorted()`进行升序或降序排序;处理复杂对象如字典列表时,通过`lambda`指定键值进行排序;同样地,`lambda`也适用于根据元组的不同位置元素来进行排序。
662 1
|
Python
Python魔法:用一行代码实现数据排序
【8月更文挑战第31天】忘掉传统多行排序代码,本文揭秘如何使用一行Python代码快速对数据进行排序,同时深入探讨背后的原理和性能考量。
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
207 0
|
数据处理 Python
Python遍历文件夹所有文件并按指定排序
Python遍历文件夹所有文件并按指定排序
443 0
|
Python
【Python】对字典进行排序
该文档介绍了如何在Python中对字典进行排序的方法。
214 2

推荐镜像

更多