51学通信论坛2017新版

标题: 1.12 字符串的常用操作 [打印本页]

作者: 爱卫生    时间: 2017-12-13 13:56
标题: 1.12 字符串的常用操作
本帖最后由 爱卫生 于 2017-12-13 23:08 编辑

1)首字母大写capitalize:
  1. names = "alice"
  2. print(names.capitalize())
复制代码
输出:Alice

2)统计字符串数量count:
  1. names = '''
  2. welcome to beijing
  3. welcome to shanghai
  4. welcome to guangzhou
  5. '''
  6. print(names.count("w"))
  7. print(names.count("wel"))
  8. print(names.count("g"))
复制代码
输出:
  1. 3
  2. 3
  3. 4
复制代码
3)字符串居中显示center
需求:把字符串居中打印,并设定总长度为30字节,不足用-补齐。
代码:
  1. names = "welcome to beijing"
  2. print(names.center(30,"*"))
复制代码
结果:
  1. ******welcome to beijing******
复制代码
可以看到,welcome to beijing是居中输出了,总长度为30字节。不足的部分用*来补齐。

4)检查是否以特定字符结尾endswith
需求:检查字符串是否以beijing结尾。
  1. names = "welcome to beijing"
  2. print(names.endswith("beijing"))
  3. print(names.endswith("shanghai"))
复制代码
结果:
  1. True
  2. False
复制代码
5)扩展输出中Tab键的长度expandtabs
代码:
  1. names="welcome to beijing"
  2. names1 = "\twelcome to beijing"
  3. print(names)
  4. print(names1)
  5. print(names1.expandtabs(tabsize=6))
复制代码
输出:[attach]5580[/attach]

可以看到。在输出中,第一行没有加tab,是顶格的。第二行加了1个tab,有缩进。第三行则扩展了这个tab的长度,转成了6个空格输出(上图紫色的部分是6个空格)。所以缩进更长了。



6)查找字符在字符串中的位置find
代码:
  1. names="welcome to beijing,welcome to beijing!"
  2. x = (names.find("come"))
  3. print(x)
  4. print(names[x:x+4])
复制代码
输出:
  1. 3
  2. come
复制代码
可以看到,输出中返回了come在字符串中的位置是3(开始字符的位置是0)。注意,find只返回第一个找到的结果的位置。也就是说上例如果有多个come,那结果也是3。


***find操作有个非常重要的用途,就是字符串的切片。可用于相关新闻推荐中的关键词拆词。例如把搜索的中国的美食拆成“中国”、“的”和“美食”3个词。

在最后一行的输出中就成功实现了对字符串的切片。当然这个是比较简单的切片,因为我们假设come的长度是已知的4个字符,come也是已知的。所以只需要+4就可以了。

7)查找字符在字符串中的索引index
index和find方法类似,区别只是当没有搜索到字符串时,index方法会报错,但find会返回-1,不影响程序执行。

8)判断是否是阿拉伯数字或阿拉伯字符isalnum

只要字符串是标准的英文字符或数字,结果都是为true的。其他为fasle。比如有特殊字符等等。
代码:
  1. names="welcome to beijing,welcome to beijing!"
  2. print("123abc".isalnum())
  3. print(names.isalnum())
复制代码
输出:

  1. True
  2. False
复制代码

9)判断是否是一个证书isdigit

代码:
  1. print('18'.isdigit())
  2. print('18.18'.isdigit())
复制代码
输出:
  1. True
  2. False
复制代码

10)判断是否是一个合法的标识符(即合法的变量名)isidentifier
代码:
  1. print('abc'.isidentifier())
  2. print('a bc'.isidentifier())
  3. print('/abc'.isidentifier())
复制代码
输出:
  1. True
  2. False
  3. False
复制代码
11)判断是否是小写islower
print("ABC".islower())将返回FALSE

12)判断是否每个单词的首字母大写istitle
代码:
  1. names="Welcome to beijing!"
  2. names1="Welcome To Beijing!"
  3. #age = 18
  4. #balance =18.18
  5. print(names.istitle())
  6. print(names1.istitle())
复制代码
输出:
  1. False
  2. True
复制代码
13)判断是否全都大写isupper
print("ABC".isupper())将返回True



14)数字转字符,并添加连接符连接join
代码:
  1. c = ('+'.join(['1','2','3']))
  2. print(type(c))
  3. print(c)
复制代码
输出:
  1. <class 'str'>
  2. 1+2+3
复制代码
可以看出,join之前,1、2、3是数字,join之后变成字符串了。然后+为连接符,也可以是逗号,输出就变成1,2,3了。

15)字符补齐长度,用填充符填充ljust
类似于center,也有补齐和填充的作用。只不过center是补齐后居中,ljust是字符显示在左边,右侧补齐。
代码:
  1. names="Welcome"
  2. print(names.ljust(30,'*'))
复制代码
结果:
  1. Welcome***********************
复制代码


16)字符补齐长度,用填充符填充rjust

类似于center,也有补齐和填充的作用。只不过center是补齐后居中,rjust是字符显示在右边,左侧补齐。
  1. names="Welcome"
  2. print(names.rjust(30,'-'))
复制代码
结果:
  1. -----------------------Welcome
复制代码
17)把大写转换成小写lower
print("ABC".lower())会输出abc。

18)把小写转换成大写upper
print("abc".upper())会输出ABC。


19)去掉两头的空格和回车strip
  1. names="   Welcome   "
  2. print(names.strip())
复制代码
输出:
Welcome。

20)只去掉左边的空格和回车lstrip
和strip类似,但lstrip是去掉字符串左边的空格与回车。(可以在字符串左边加一个/n,即添加回车符看效果)



21)只去掉右边的空格和回车rstrip
和strip类似,但rstrip是去掉字符串右边的空格与回车。



22)翻译maketrans和translate
这个是先定义一个翻译规则,然后对字符串按照该规则进行翻译。可以达到随机密码或者莫尔斯电码的类似效果。

代码:
  1. city1="lanzhou"
  2. city2="guangzhou"
  3. p = str.maketrans('lanzhou','1234567')
  4. print(city1.translate(p))
  5. print(city2.translate(p))
复制代码
输出:
  1. 1234567
  2. g723g4567
复制代码
可以看到,翻译规则是l转成1,a转成2。。。u转成7。所以city1调用translate方法的时候,完全匹配,被翻译成了1234567。
但city2是guangzhou,所以g没有匹配,保留了。u匹配了,被翻译成了7,a匹配了,被翻译成了2。。。最后的结果就是g723g4567。

需要注意,定义翻译规则(maketrans)的时候,前后两个字符串一定要相同长度,否则会报错以下错误。
ValueError: the first two maketrans arguments must have equal length。
23)字符替换replace
把字符串里面的字符替换成另一个字符。
  1. print("abcabcabc".replace('a','A'))
  2. print("abcabcabc".replace('a','A',2))
复制代码
结果:
  1. AbcAbcAbc
  2. AbcAbcabc
复制代码
可以看到,默认是全部替换,将a替换成了A。如果指定一个数字2,则可以只替换前面2个。

24)搜索最右侧的字符rfind
和find类似,只不过是搜索最右边符合条件的字符串。但数的方向还是从左往右数。
  1. print("defabcdefabc".find('abc'))
  2. print("defabcdefabc".rfind('abc'))
复制代码
输出:
  1. 3
  2. 9
复制代码


25)拆分字符split、按换行符来拆分splitlines和右侧拆分字符rsplit

25.1)split
按照空格把字符串拆分成一个列表。
注:默认是按空格来分,也可以人工指定按什么来分。
代码:
  1. print("welcome to beijing!".split())
  2. print("welcome to beijing!".split(‘i’))
  3. print("1+2+3+4".split('+'))
复制代码
输出:
  1. ['welcome', 'to', 'beijing!']
  2. ['welcome to be', 'j', 'ng!']
  3. ['1', '2', '3', '4']
复制代码
可以看到,倒数第二行和最后一行,字符l和+号被当成分隔符,然后被去掉了。

25.2)按换行符来拆分splitlines
代码:
  1. print("1+2\n+3+4".splitlines())
复制代码
输出:
  1. ['1+2', '+3+4']
复制代码
25.3)右侧拆分字符rsplit
代码:
  1. print("bj.mnc000.mcc460.3gppnetwork.org".rsplit('.'))
  2. print("bj.mnc000.mcc460.3gppnetwork.org".rsplit('.',1))
  3. print("bj.mnc000.mcc460.3gppnetwork.org".rsplit('.',2))
  4. print("bj.mnc000.mcc460.3gppnetwork.org".rsplit('.',3))
复制代码
输出:
  1. ['bj', 'mnc000', 'mcc460', '3gppnetwork', 'org']
  2. ['bj.mnc000.mcc460.3gppnetwork', 'org']
  3. ['bj.mnc000.mcc460', '3gppnetwork', 'org']
  4. ['bj.mnc000', 'mcc460', '3gppnetwork', 'org']
复制代码
26)大小写反转swapcase
把字符串中的大小写反转:


print("Beijing".swapcase())的输出是:bEIJING
27)填充zfill


代码:print("Beijing".zfill(20))输出是0000000000000Beijing。
用0来填充。













欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/) Powered by Discuz! X3