码迷,mamicode.com
首页 > 其他好文 > 详细

字符串

时间:2018-09-14 21:29:32      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:分割   ng2   填充   其他   line   拼接字符串   you   进制   元组   


字符串
一个个字符组成的有序的序列,是字符的集合
使用单引号,双引号,三引号引住的字符序列

字符串是不可变的对象

Python3起,字符串就是Unicode类型

字符串的定义 初始化

举例:
s1 = ‘string‘
s2 = "string2"
s3 = ‘‘‘this‘s a ‘string‘ ‘‘‘
s4 = ‘hello \n mageedu.com‘
s5 = r "hello \n mageedu.com"
s6 = ‘c:\windows\nt‘
s7 = R "c:\windows\nt"
s8 = ‘c:\windows\\nt‘
sql = """select * from user where name=‘tom‘ """

字符串元素访问--下标

字符串支持使用索引访问
sql = """select * from user where name=‘tom‘ """
sql[4] = ‘c‘ #字符串‘c‘

有序的字符集合,字符序列
for c in sql:
print(c)
print(type(c)) #什么类型? str

可迭代
lst = list(sql)


字符串+连接

+ -> str
将2个字符串连接在一起
返回一个新的字符串

字符串join连接

"string".join(iterable) -> str
将可迭代对象连接起来,使用string作为分隔符
可迭代对象本身元素都是字符串
返回一个新字符串

exp:
lst = [‘1‘,‘2‘,‘3‘]
print("\"".join(lst)) #分隔符是双引号
print(" ".join(lst))
print("\n".join(lst))
lst = [‘1‘,[‘a‘,‘b‘],‘3‘]
print(" ".join(lst))

字符串分隔

分隔字符串的方法分为2类
split系 #切割
将字符串按照分隔符分割成若干字符串,并返回列表 list[]

partition系
将字符串按照分隔符分隔成2段,返回这2段和分隔符的元组 tuple()


split(sep= None,maxsplit=-1) -> list of strings
从左到右
sep指定分隔符。缺省的情况下空白字符串作为分隔符
maxsplit指定分隔的次数,-1表示遍历整个字符串

s1 = "I‘m \ta super student."
s1.split() -> ["I‘m", ‘a‘, ‘super‘, ‘student.‘]
s1.split(‘s‘) -> ["I‘m \ta ", ‘uper ‘, ‘tudent.‘]
s1.split(‘super‘) -> ["I‘m \ta ", ‘ student.‘]
s1.split(‘super ‘) -> ["I‘m \ta ", ‘student.‘]
s1.split(‘ ‘) -> ["I‘m", ‘\ta‘, ‘super‘, ‘student.‘]
s1.split(‘ ‘,maxsplit=2) -> ["I‘m", ‘\ta‘, ‘super student.‘]
s1.split(‘ \t‘,maxsplit=2) -> ["I‘m", ‘a super student.‘]
s1.split(‘ \t‘,2) -> ["I‘m", ‘a super student.‘]


reslit(sep=None,maxsplit=-1) -> list of strings
从右向左
sep指定分隔字符串,缺省的情况下空白字符串作为分隔符
maxsplit指定分隔的次数,-1表示遍历整个字符串


s1 = "I‘m \ta super student."
s1.rsplit() ->
s1.rsplit(‘s‘) ->
s1.rsplit(‘super‘) ->
s1.rsplit(‘super ‘) ->
s1.rsplit(‘ ‘) ->
s1.rsplit(‘ ‘,maxsplit=2) ->
s1.rsplit(‘ \t‘,maxsplit=2) ->
s1.rsplit(‘ \t‘,2) ->


字符串分隔
splitlines([keepends]) -> list of strings
按照行来分切字符串
keepends指的是是否保留分隔符
行分隔符包括\n、\r\n、\r等

exp:
‘ab c\n\nde fg\rkl\r\b‘.splitlines()
‘ab c\n\nde fg\rkl\r\b‘.splitlines(True)
s1 = "I‘m a super student.
You‘re a super teacher."
print(s1)
print(s1.splitlines())
print(s1.splitlines(True))

字符串分隔***
partition(sep) -> (head,sep,tail)
从左到右,遇到分隔符就把字符串分隔成两部分,返回 头、分隔符、尾三部分的三元组;
如果没有找到分隔符,就返回 头,2个空元素的三元组
sep分隔字符串,必须指定

exp
s1 = "I‘m a super student"
s1.partition(‘s‘)
("I‘m a ", ‘s‘, ‘uper student‘)
s1.partition(‘stu‘)
("I‘m a super ", ‘stu‘, ‘dent‘)
s1.partition(‘‘)
报错 ValueError: empty separator
s1.partition(‘abc‘)
("I‘m a super student", ‘‘, ‘‘)

rpartition(sep) -> (head,sep,tail)
从右到左,遇到分隔符就把字符串分隔成两部分,返回 头、分隔符、尾三部分的三元组;
如果没有找到分隔符,就返回 头,2个空元素的三元组


字符串大小写
upper()
全大写
lower()
全小写
大小写,做判断的时候用

swapcase()
交互大小写

字符串排版
title() -> str
标题的每个单词都大写

capitalize() -> str
首个单词大写

center(width,[,fillchar]) -> str
width 打印宽带
fillchar 填充的字符

zfill(width) -> str
width 打印宽带,居右,左边用0填充

ljust(width,[,fillchar]) -> str 左对齐
rjust(width,[,fillchar]) -> str 右对齐
中文用的少,了解下


字符串修改***
replace(old,new[,count]) -> str
字符串中找到匹配替换为新子串,返回新字符串
count表示替换几次,不指定就是全部替换

exp:
‘www.baidu.com‘.replace(‘w‘,‘g‘)
‘www.baidu.com‘.replace(‘w‘,‘g‘,2)
‘www.baidu.com‘.replace(‘w‘,‘g‘,3)
‘www.baidu.com‘.replace(‘ww‘,‘g‘,2)
‘www.baidu.com‘.replace(‘w‘,‘python‘,2)

字符串修改***

strip([chars]) -> str
从字符串两端去除指定的字符集chars中的所有字符
如果chars没有指定,去除两端的空白字符

exp:
s = "\r \n \t Hello Python \n \t"
s.strip()
‘Hello Python‘
s = "I am very very very sorry"
s.strip(‘Iy‘)
s.strip(‘Iy ‘)

lstrip([chars]) -> str
从左开始

lstrip([chars]) -> str
从右开始


字符串查找*

find(sub,[start[,end]]) -> int
在指定的区间[start,end],从左到右,查找子串sub,找到返回索引,没找到返回-1

rfind(sub,[start[,end]]) -> int
在指定的区间[start,end],从右到左,查找子串sub,找到返回索引,没找到返回-1

exp:
s = "I am very very very sorry."
s.find(‘very‘)
5
s.find(‘very‘,5)
5
s.find(‘very‘,6,13)
-1 #未找到
s.rfind(‘very‘,10)
s.rfind(‘very‘,10,15)
s.rfind(‘very‘,-10,-1)


字符串查找*

index(sub,start[,end]) -> int
在指定的区间[start,end],从左到右,查找子串sub,找到返回索引,没找到抛出异常ValueError

rindex(sub,start[,end]) -> int
在指定的区间[start,end],从右到左,查找子串sub,找到返回索引,没找到抛出异常ValueError

exp:
s = "I am very very very sorry."
s.index(‘very‘)
5
s.index(‘very‘,5)
5
s.index(‘very‘,6,13)
-1 #未找到
s.index(‘very‘,10)
s.index(‘very‘,10,15)
s.index(‘very‘,-10,-1)

时间复杂度O(n)
index\find\count都是O(n)
随着字符串规模的增大,而效率下降

len(string)
返回字符串的长度,即字符的个数

count(sub[,start[,end]]) -> int
在指定区间[start,end],从左到右,统计子串sub出现的个数

exp:
s = "I am very very very sorry."
s.count(‘very‘)
3
s.count(‘very‘,5)
3
s.count(‘very‘,10,14)

字符串判断***

endswith(suffix,[,start[,end]]) -> bool
在指定的区间[start,end],字符串石峰有suffix结尾

startswith(suffix,[,start[,end]]) -> bool
在指定的区间[start,end],字符串石峰有suffix开头

exp:
s = "I am very very very sorry."
s.startswith(‘very‘)
True
s.startswith(‘very‘,5)
True
s.startswith(‘very‘,5,9)
True
s.endswith(‘very‘,5,9)
True
s.endswith(‘very‘,5,-1)
False
s.endswith(‘very‘,5,100)
False

字符串判断 is 系列

isalnum() -> bool 是否是字母和数字的组成
isalpha()是否是字母
isdecimal()是否只包含十进制数字
isdigit()是否全部数字(0-9)
isidentifier()是不是字母和下划线开头,其他都是字母,数字,下划线
islower()是否都是小写
isupper()是否都是大写
isspace()是否只包含空白字符


字符串格式化
字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便
join拼接只能使用分隔符,且要求被拼接的是可迭代对象
+ 拼接字符串还算方便,但是非字符串需要先转化为字符串才能拼接

在2.5版本之前,只能使用print style 风格的printf函数

print-style formatting,来自C语言的printf函数
格式要求
占位符:使用%和格式字符组成,如 %s,%d等
s调用str,r会调用repr(),所有对象都可以被这两个转换
占位符中还可以插入修饰字符,例如%03d表示打印3个位置,不够前面补零
format %values 格式化字符串和被格式的值直接使用%分隔
values只能是一个对象,或是一个和格式字符串占位符数目相等的元组,或一个字典


prinf-style formatting

"I am %03d" %(20,)
‘I am 020‘
‘I like %s.‘%‘Python‘
‘I like Python.‘
‘‘%3.2f%%,0x%x,0x%02x‘%(89.7654,10,15)
‘89.77%,0xa,0x0f‘
‘%06.2f%%,0x%x,0x%02x‘%(89.7654,10,15)
‘089.77%,0xa,0x0f‘
"I am %5d" %(20,)
‘I am 20‘
"I am %-5d" %(20,)
‘I am 20 ‘


字符串格式化***

format函数格式字符串语法----Python鼓励使用
"{}{xxx}".format(*args,**kwargs) -> str
arg是位置参数,是一个元组
kwargs是关键字参数,是一个字典
花括号表示占位符
{}表示按照顺序匹配位置参数,{n}表示取位置参数索引为n的值
{xxx}表示在关键字参数中搜索名称一致的
{{}} 表示打印花括号

位置参数
"{}:{}".format(‘192.168.1.100‘,‘8888‘),这就是按照位置顺序用位置参数替换前面的格式字符串的占位符
‘192.168.1.100:8888‘
关键字参数或命名参数
"{server}{1}:{0}".format(8888,‘192.168.1.100‘,server=‘Web Server Info:‘)
‘Web Server Info:192.168.1.100:8888‘
位置参数按照序号匹配,关键字参数按照名称匹配

访问元素
"{0[0]}.{0[1]}".format((‘mageedu‘,‘com‘))
‘mageedu.com‘
对象属性访问
from collections import namedtuple
Point = namedtuple(‘Point‘,‘x y‘)
p = Point(4,5)
"{{{0.x},{0.y}}}".format(p)
‘{4,5}‘

对齐
‘{0}*{1}={2:<2}‘.format(3,2,2*3)
‘3*2=6 ‘
‘{0}*{1}={2:<02}‘.format(3,2,2*3)
‘3*2=60‘
‘{0}*{1}={2:>02}‘.format(3,2,2*3)
‘3*2=06‘

‘{:^30}‘.format(‘centerd‘)
‘ centerd ‘

‘{:#^30}‘.format(‘centerd‘)
‘###########centerd############‘

进制
"int:{0:d};hex:{0:x};oct:{0:o};bin:{0:b}".format(42)
‘int:42;hex:2a;oct:52;bin:101010‘

"int:{0:d};hex:{0:#x};oct:{0:#o};bin:{0:#b}".format(42)
‘int:42;hex:0x2a;oct:0o52;bin:0b101010‘

octes = [192,168,0,1]
‘{:02x}{:02x}{:02x}{:02x}‘.format(*octes) * 把每个元素分解
‘c0a80001‘

 

字符串

标签:分割   ng2   填充   其他   line   拼接字符串   you   进制   元组   

原文地址:https://www.cnblogs.com/Felix-DoubleKing/p/9648844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!