本文目录一览:
- 1、python如何对一组数排序
- 2、深入理解python中的排序sort
- 3、Python对数据进行排序-中英文
- 4、python中怎么让前5个升序,后五个降序,派Python中输入十个数字,怎么让前五个升序?
- 5、用python对10个数进行排序
python如何对一组数排序
python对一组数排序的方法:
1、使用sorted()方法可以进行升序排序
2、可以operator模块方法进行多级排序
operator 模块方法允许多级排序。例如,可以先按 grade 排序,然后再按 age 排序
更多Python知识,请关注:Python自学网!!
深入理解python中的排序sort
进行一个简单的升序排列直接调用sorted()函数,函数将会返回一个排序后的列表:
sorted函数不会改变原有的list,而是返回一个新的排好序的list
如果你想使用就地排序,也就是改变原list的内容,那么可以使用list.sort()的方法,这个方法的返回值是None。
另一个区别是,list.sort()方法只是list也就是列表类型的方法,只可以在列表类型上调用。而sorted方法则是可以接受任何可迭代对象。
list.sort()和sorted()函数都有一个key参数,可以用来指定一个函数来确定排序的一个优先级。比如,这个例子就是根据大小写的优先级进行排序:
key参数的值应该是一个函数,这个函数接受一个参数然后返回以一个key,这个key就被用作进行排序。这个方法很高效,因为对于每一个输入的记录只需要调用一次key函数。
一个常用的场景就是当我们需要对一个复杂对象的某些属性进行排序时:
再如:
前面我们看到的利用key-function来自定义排序,同时Python也可以通过operator库来自定义排序,而且通常这种方法更好理解并且效率更高。
operator库提供了 itemgetter(), attrgetter(), and a methodcaller()三个函数
同时还支持多层排序
list.sort()和sorted()都有一个boolean类型的reverse参数,可以用来指定升序和降序排列,默认为false,也就是升序排序,如果需要降序排列,则需将reverse参数指定为true。
排序的稳定性指,有相同key值的多个记录进行排序之后,原始的前后关系保持不变
我们可以看到python中的排序是稳定的。
我们可以利用这个稳定的特性来进行一些复杂的排序步骤,比如,我们将学生的数据先按成绩降序然后年龄升序。当排序是稳定的时候,我们可以先将年龄升序,再将成绩降序会得到相同的结果。
传统的DSU(Decorate-Sort-Undecorate)的排序方法主要有三个步骤:
因为元组是按字典序比较的,比较完grade之后,会继续比较i。
添加index的i值不是必须的,但是添加i值有以下好处:
现在python3提供了key-function,所以DSU方法已经不常用了
python2.x版本中,是利用cmp参数自定义排序。
python3.x已经将这个方法移除了,但是我们还是有必要了解一下cmp参数
cmp参数的使用方法就是指定一个函数,自定义排序的规则,和java等其他语言很类似
也可以反序排列
python3.x中可以用如下方式:
Python对数据进行排序-中英文
sort_values(by,axis=0,ascending=True,inplace=False,kind='quicksort',na_position='last')
参数说明:
by: 可以填入字符串或者字符串组成的列表。也就是说, 如果axis=0,那么by="列名";如果axis=1,那么by="行名"。
axis: {0 or ‘index’, 1 or ‘columns’}, default 0,意思就是如果 axis=0,就按照索引排序,即纵向排序;如果axis=1,则按列排序,即横向排序。默认是axis=0 。
ascending: 输入布尔型, True是升序 , False是降序 ,也可以可以是[True,False],即第一个字段升序,第二个字段降序 。
inplace : 输入布尔型,是否用排序后的数据框替换现有的数据框
kind: 排序的方法,{‘quicksort’, ‘mergesort’, ‘heapsort’},默认是使用‘quicksort’。这个参数用的比较少,大家可以试一试。
na_position : {‘first’, ‘last’}, 缺失值的排序 ,也就说决定将缺失值放在数据的最前面还是最后面 。first是排在前面,last是排在后面,默认是用last 。
例子:
scores= pd.DataFrame([[87,56,85],[46,87,97],[34,65,86]],columns=['jack', 'rose', 'mike'])
scores
1.对‘rose’这一列进行降序排序:
df_sc=scores.sort_values(by='rose',ascending=False)
df_sc
2.对第0行进行升序排序:
scores.sort_values(by=0,axis=1,ascending=True)
3.第1行进行升序,第0行进行降序:
scores.sort_values(by=[1,0],axis=1,ascending=[True,False]
4.观察数据
data.head:
查看数据的前五行。
data.tail:
查看数据的后五行。
data.shape :
查看矩阵或数组的维数,或者是说数据表的结构(有几行几列)。
data.info :
查看数据的基本信息,如:数据类型、缺失值数量等。
#brand目标:中文-中英-英文
2.1 包含中文,纯英文
for i in range(0,len(file1)):
result = re.compile(u'[\u4e00-\u9fa5]')
contents = file1['brand'][i]
match = result.search(contents)
if match:
file1.loc[i,['index1']]=0 #0为包含中文
else:
file1.loc[i,['index1']]=1 #1为纯英文
2.1 包含英文,纯中文
for i in range(0,len(file1)):
file1.loc[i,['index2']]=len(re.findall('[a-zA-Z]+', file1['brand'][i]) ) #0为纯中文,1为包含英文
python中怎么让前5个升序,后五个降序,派Python中输入十个数字,怎么让前五个升序?
分成两个列表分别排序,代码如下:
s = input().split()
l1 = [ int(x) for x in s[:5] ] # 前5个数字
l2 = [ int(x) for x in s[-5:] ] # 后5个数字
l1.sort() # 前5个数字升序
l2.sort(reverse=True) # 后5个数字降序
print(l1 + l2)
运行结果如下:
输出符合题意,望采纳~
用python对10个数进行排序
sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
by: 可以填入字符串或者字符串组成的列表。也就是说,如果axis=0,那么by="列名";如果axis=1,那么by="行名"。
axis: {0 or ‘index’, 1 or ‘columns’}, default 0,意思就是如果axis=0,就按照索引排序,即纵向排序;如果axis=1,则按列排序,即横向排序。默认是axis=0。
ascending: 输入布尔型,True是升序,False是降序,也可以可以是[True,False],即第一个字段升序,第二个字段降序 。
inplace: 输入布尔型,是否用排序后的数据框替换现有的数据框(这个在之前的文章写过很多次了~)
kind: 排序的方法,{‘quicksort’, ‘mergesort’, ‘heapsort’},默认是使用‘quicksort’。这个参数用的比较少,大家可以试一试。
na_position : {‘first’, ‘last’},缺失值的排序,也就说决定将缺失值放在数据的最前面还是最后面。first是排在前面,last是排在后面,默认是用last。
创建数据表:
scores= pd.DataFrame([[87,56,85],[46,87,97],[34,65,86]],
columns=['jack', 'rose', 'mike'])
scores
‘rose’这一列进行降序排序:
df_sc=scores.sort_values(by='rose',ascending=False)
df_sc
‘mike’这一列进行升序排序:
df_sc=scores.sort_values(by='mike',ascending=True)
df_sc
对第0行进行升序排序:
scores.sort_values(by=0,axis=1,ascending=True)
我们再尝试对第1行进行升序,第0行进行降序:
scores.sort_values(by=[1,0],axis=1,ascending=[True,False]