ex38列表相关的更多

这里边主要有两个关键的操作:一是split,还有一个是join。在一定程度上两者功能相反。

talk is cheap,show the code.

 1 #-*- coding: UTF-8 -*-
 2 ten_things = "Apples Oranges Crows Telephone Light Sugar"
 3 
 4 print "Wait there's not 10 things in that list.Let's fix that."
 5 
 6 stuff = ten_things.split(' ')#根据空格分割字符串
 7 more_stuff = ["Day","Night","Song","Frisbee","Corn","Banana","Girl","Boy"]
 8 
 9 while len(stuff) != 10:
10     next_one = more_stuff.pop() #随机错能够列表中删除一个元素,并赋值到外边
11     print "Adding:",next_one
12     print"more_stuff",more_stuff
13     stuff.append(next_one)
14     print "There's %d items now." % len(stuff)
15     
16 print "There we go:",stuff
17 
18 print "Let's do some things with stuff."
19 
20 print stuff[1]
21 print stuff[-1]
22 print stuff.pop()
23 print ' '.join(stuff)
24 print '#'.join(stuff[3:5])#用“#”连接所有元素,这里就是和split有点相反的一个功能
25 
26 print '+'.join(stuff)
27     

下面详细介绍一下split的功能。

完整的split应该是:

str.split(str="",num=string.count(str))[n]

参数说明:
str:   表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
[n]:   表示选取第n个分片

注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略

一下是例子:

1 st0= 'iisongiiihuaniiiigongi'
2 
3 print st0.split('i')

这个时候输出的结果是:

['', '', 'song', '', '', 'huan', '', '', '', 'gong', '']

并非想象汇总的只保留有效字符串,对于这个解释,@宋恒公 在其博客里边解释比较形象,搬来一用。

分析:  

  这个结果可能就有点出乎意料了并不是想象中的['song', 'huan', 'gong'] 而是多了很多空字符串元素'',这个怎么理解呢?    我的理解方式是,当带参数时,我们得把字符串想象成一块五花肉,我们要做 一件奇葩的事情,就是将肥肉丢到垃圾桶,把瘦肉留下。  比如'iisongiiihuaniiiigongi'这串五花肉,'i'就是要丢掉的肥肉,每次还只能切 'i'这么多。  切的时候是从左到右,一刀下去肥肉'i'丢掉,刀刃左边的部分拿走作为list的一个元素, 刀刃右边的就是剩下的,那么继续切剩下的部分,直到切完。

 'iisongiiihuaniiiigongi'这块肉比较特殊:  

  其一、他的开始和结尾都有i,而且i还不止一个!这样按照上述的方法就会切出 空气,就是列表中我们看到的'', 空字符串元素。    如'iisongiiihuaniiiigongi',当第一刀下去的时候,第一个i被丢到了垃圾桶, 而刀刃的左边什么都没有,所以列表的第一个元素就是'',空字符串元素。  一刀下去之后,就剩下'isongiiihuaniiiigongi'。  所以第二刀下去之后,又得到一个空字符串元素,目前“肉”就剩下'songiiihuaniiiigongi'。  第三刀又切掉一个i,那么刀刃左边的就是song,所以第三个元素就是'song'。    直到切到最后,整坨肉就只剩下一个i了,使用最后一刀下去i被切掉了,刀刃的左边此时也 什么都没有了,所以最后一个元素任然是空字符串。

最后放一个特别好的例子:

>>> str="hello boy<[www.doiido.com]>byebye"
  
>>> print str.split("[")[1].split("]")[0]
www.doiido.com
  
>>> print str.split("[")[1].split("]")[0].split(".")
['www', 'doiido', 'com']

 

posted @ 2017-11-27 22:46  丁头零零  阅读(179)  评论(0编辑  收藏  举报