设为首页 收藏本站
查看: 878|回复: 0

[经验分享] Google's Python Class 4 (Python Sorting)

[复制链接]

尚未签到

发表于 2017-4-22 14:37:11 | 显示全部楼层 |阅读模式
  原文:http://code.google.com/edu/languages/google-python-class/sorting.html

Python Sorting(排序)

Google Code University › Programming Languages
为list排序的最简单方法是使用sorted()函数,它会返回一个排序号的新的list.

  a = [5, 1, 4, 3]
 
print sorted(a)  ## [1, 3, 4, 5]
 
print a  ## [5, 1, 4, 3]
由于新的sorted()函数看起来比旧的sort()更加简单方便,我推荐使用sorted().
sorted()也可以通过指定参数来定制排序方式. 使用sorted() 的可选参数 reverse=True, 如: sorted(list, reverse=True), 可以逆序排序.

  strs = ['aa', 'BB', 'zz', 'CC']
 
print sorted(strs)  ## ['BB', 'CC', 'aa', 'zz'] (case sensitive)
 
print sorted(strs, reverse=True)   ## ['zz', 'aa', 'CC', 'BB']
使用key=自定义排序 

sorted()函数提供一个可选参数key来指定元素比较前要调用什么函数. key指定的函数会返回一个可比较的值,sorted函数将使用这个“代理”值来对list进行排序.
如下 key=len (调用len()函数)将list按照长度来进行排序:

  strs = ['ccc', 'aaaa', 'd', 'bb']
 
print sorted(strs, key=len)  ## ['d', 'bb', 'ccc', 'aaaa']

另一个例子 "str.lower" 将所有元素先转换为小写再排序

  ## "key" argument specifying str.lower function to use for sorting
 
print sorted(strs, key=str.lower)  ## ['aa', 'BB', 'CC', 'zz']
你也可以传递一个自定义的函数(有点类似javascript):

  ## Say we have a list of strings we want to sort by the last letter of the string.
  strs
= ['xc', 'zb', 'yd' ,'wa']
 
## Write a little function that takes a string, and returns its last letter.
 
## This will be the key function (takes in 1 value, returns 1 value).
 
def MyFn(s):
   
return s[-1]
 
## Now pass key=MyFn to sorted() to sort by the last letter:
 
print sorted(strs, key=MyFn)  ## ['wa', 'zb', 'xc', 'yd']
使用自定义函数的时候,一定要确认函数可以接收一个参数并且返回一个可比较的值. 另外sorted()还有一个可选参数"cmp=cmpFn" 用来指定一个比较函数,它可以接收两个参数,来比较元素的大小返回1/0/-1. 通常strings, ints, ... 都有一个内建的cmp(a, b), 但是我更建议你们使用key=参数来对元素进行比较.

sort() method

sort()函数按照升序对list进行排序并且返回none:

  alist.sort()            ## correct
  alist
= blist.sort()    ## NO incorrect, sort() returns None
sort()不能返回list本身这点很容易被忽略导致上面的错误,同时sort()只能用在list上而不能用在其他集合上,这点和sorted()很不同. 相对而言,新的sorted会创建一个新的list但是sort不会,从这点上看sort的速度要稍微快一点.

Tuples(元组)

元组是一个确定元素数量的集合,并且元素的数量、元素的值都是不可变的 (不可变是指元素本身不可变,如果元素只是一个指向另外元素的指针,那么它指向的内容并非不可变,类似Java中的final). 元组在Python常常作为结构框架,如方法参数等. 一个需要返回多值的函数仅仅需要返回一个元组即可. .
创建元组很简单,只需要使用圆括号和逗号分割即可. 元素访问同list一样 -- len(), [ ], for, in等等,都是一样的。

  tuple = (1, 2, 'hi')
 
print len(tuple)  ## 3
 
print tuple[2]    ## hi
  tuple
[2] = 'bye'  ## NO, tuples cannot be changed
  tuple
= (1, 2, 'bye')  ## this works
创建一个单元素的元组,结尾必须有一个逗号.

  tuple = ('hi',)   ## size-1 tuple
在后面加一个逗号这点很有趣,但是这是为了让解释器区分“段落”和元组声明,你可以用圆括号把多行数据表示为一个语句。
赋值的时候元素数量必须对应,否则会抛出错误

  (x, y, z) = (42, 13, "hike")
 
print z  ## hike
 
(err_string, err_code) = Foo()  ## Foo() returns a length-2 tuple
List Comprehensions(List解析) 

List解析是针对list进行二次处理获得新数据的一种方式 假设我们现在有一个列表[1, 2, 3], 下面是对其进行解析获得平方数据: [1, 4, 9]:

  nums = [1, 2, 3, 4]
  squares
= [ n * n for n in nums ]   ## [1, 4, 9, 16]
 它的语法是[ expr for var in list ] --  for var in list 看起来很想for循环,但是她没有冒号结尾. expr表示怎么获得新的list中的值. 下面这个例子为每个list元素添加!!!结尾并变成大写:

  strs = ['hello', 'and', 'goodbye']
  shouting
= [ s.upper() + '!!!' for s in strs ]
 
## ['HELLO!!!', 'AND!!!', 'GOODBYE!!!']
同样你也可以为这条语句增加限制条件:

  ## Select values <= 2
  nums
= [2, 8, 1, 6]
  small
= [ n for n in nums if n <= 2 ]  ## [2, 1]
 
## Select fruits containing 'a', change to upper case
  fruits
= ['apple', 'cherry', 'bannana', 'lemon']
  afruits
= [ s.upper() for s in fruits if 'a' in s ]
 
## ['APPLE', 'BANNANA']


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-367884-1-1.html 上篇帖子: Google python logpuzzle.py (python 2.7) 下篇帖子: [python]用python实现的pca算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表