2018-08-22-day03-字符串

一.计算机在存数据的时候,都是以二进制的形式存在计算机中的(存一个数的补码)

1.原码:数据的二进制形式

正数的原码:最高位为符号位,正数的符号位为0,后面的是数值大小
负数的原码:最高位为符号位,正数的符号位为1,后面的是数值大小
例:
10->1010->原码-0b 0 0001010
-10->1010->原码-0b 1 0001010

2.反码:

正数的反码:反码和原码一样
负数的反码:符号位不变,后面的每一位的值取反(0->1,1->0)
例:
10->0 0001010
-10->1 1110101

3.补码:

正数的补码:补码和反码、原码一样
负数的补码:符号位不变,反码加1
-10->1 1110110

4.加法器

原码:2+-3 -->10000101
补码:2+-3 -->00000010+11111101=11111111-->反码:11111110:原码10000001-->(-1)
-3:10000011:11111100:11111101

二、字符串

1.什么是字符串

a.在python中用单引号或者双引号括起来的字符集就是字符串
b.字符串中的每个独立的单元我们叫做字符,例如:字符串'abc123'中的'a','b','c','1','2','3'就是字符

2.转义字符

注意:python中没有字符类型,如果要表示字符就是用一个长度是1的字符串表示
长度:指的就是字符串中字符的个数,例如:"abc"-长度是3

      通过\将一些特殊的字符转换成一个具有特殊功能或者特殊意义的字符,就是转义字符
常见的转义字符
\n  换行
\t  制表符(相当于tab键)
\\  出现一个斜杠
\'  出现’
\"  出现”
在计算字符串长度的时候,字符串的长度是1

3.Unicode编码

python中字符的编码采用Unicode编码
将字符转换成指定的数值,这个过程就是编码。(编码的目的是方便计算机存储)
将数值转换成对应的符号的过程就是反编码(解码)
unicode是采用两个字节对一个字符进行编码,Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
    a).将Unicode码转换成字符:chr(码)
        print(char(0x4E00))
        print(char(0x4E01))
    b).将字符转换成Unicode编码:ord(字符)
        print(hex(ord("你")))

三、获取字符串

字符串实质可以是一个不可变的序列,序列内容是字符,一旦字符串确定,那么里面的字符和字符的位置就不可变了,例如:"abc"

1.怎么获取单个字符

python中的字符串,可以通过下标(索引)来获取指定位置上的位置:字符串[索引]
说明:
a.字符串:可以是字符串值,也可以是字符串变量
b.[]:中括号是固定语法
c.索引:
从0开始到字符串长度减1
str1='abcd'
print(str1[0])
从-1从到负的长度(-1对应的是最后一个字符,-2对应的是倒数第二个字符)
注意:索引不能越界,否则会报错(产生异常)

2.获取部分字符(获取子串)--切片

字符串[下标1:下标2]:从下标1开始获取,获取到下标2前的所有的字符:左包右不包

    str2="hello world"
    print(str2[0:4])

注意:下标1对应的位置一定要在下标2对应的位置的前面
切片时下标可以越界,越界的时候就取临界值
下标1的值<下标2的值

切片方法2:
字符串[下标1:下标2:步进]
例子:

    str="123456789"
    print(str[0:10:2])
    13579

说明:从下标1开始获取,每次下标值增加步进值,每增加一次取一个字符,直到取到下标2前为止

    print(str[-1:1:-2])
    9753

注意:
a.步进如果是正数,那么下标1对应的字符的位置一定要在下标2对应的位置的前面
步进是负数,那么下标1对应的位置一定要在下标2对应的位置的后面
b.下标2对应的字符是取不到的

下标的省略:
切片的时候,下标1和下标2是可以省略的
例:

    print(str2[-2:-1])

如果下标1不写,默认从开头(可能是字符串的第一个字符也可能是最后一个字符,主要是看步进的值)开始获取,如果下标2不写默认到字符串结尾(可能是字符串的第一个字符,也可能是字符串的最后一个字符,主要看步进)

  print(str[:])  #123456789
    print(str[::-1])        #987654321
    print(str[-1::-1])      #987654321
    print(str[:5:1])        #12345
    print(str[:5:-1])       #987
    print(str[:4])      #1234
    print(str[2:])      #3456789

如果下标1和下标2都不写,则相当于复制一个新的字符串,如果步进为-1,则相当于是反转复制字符串
练习:要求将一个字符串中的所有奇数位上的字符获取出来

    print(str[1::2])    #2468

四、字符串的相关运算

1.+ 运算符

python支持两个字符串相加,其效果就是将两个字符串拼接在一起产生一个新的字符串

    print('abc'+'123')  #abc123

注意:如果+的一边是字符串,那么另一边也必须是字符串

2.* 运算符

格式:
字符串 * 整数:字符串重复多次

    print('abc' * 3)    #abcabcabc

3.支持所有的比较运算符

    print("abc"=="abc") #True
    print("abc">"abd")  #False
    print("abc"<"abd")  #True
    print("abcd'>"abcde")   #False

一个字符一个字符相比,比较到不一样为止。比较的是每一位的字符的Unicode值

     print('一'<'丁') #True

4.in 和not in

str1 in str2:判断str1是否在str2中(str2是否包含str1/str1是否是str2的子串),结果是bool值

5.获取字符串的长度

字符串的长度指的是字符串中字符的个数
内置函数len()

    len("12344")    #5
    len("12345\n")  #6

空串:长度为0

    a=''
    b=""

6.阻止转义

在字符串的最前面添加r或者R可以阻止转义

    print(r'a\nb')  #a\nb
    print(R'a\nb')  #a\nb
    print(len(r'a\nb\\'))   #6

练习:

    str1 = r'\nabc123'  求str1[3]    #b
    str2 = 'abc123\\123'    求str2[-5]   #3

五、字符串相关的方法

python为字符串提供了很多的内建函数
字符串.函数()
注意:这些所有函数的功能都不会影响原来的字符串,而是产生一个新的字符串

1.capitalize()

        #将字符串的第一个字符转换为大写
    str = 'hello python'
    newstr = str1.capitalize()
    print(newstr)   #Hello python

2.center(width,fillchar)

#返回一个指定width居中的字符串,fillchar是填充字符,默认是空格
    print("abc".center(40,'&'))
    #&&&&&&&&&&&&&&&&&&abc&&&&&&&&&&&&&&&&&&&

#说明;让字符串变成width对应的长度,原内容居中,剩余的部分使用fillchar的值来填充

3.rjust(width,fillchar)

#让字符串变成width对应的长度,原内容靠右,剩余的部分使用fillchar的值来填充
    print("abc".rjust(20,">"))  #>>>>>>>>>>>>>>>>>abc
    print("1".rjust(3,'0'))     #001

4.count(str)

    #判断str值在原字符串中出现的次数
    print('abcaaa'.count('a'))  #4

5.join()

str1.join(str2):在str2中的每个字符之间插入一个str1

    print('+'.join("abc"))      #a+b+c

6.replace()

str1.replace(old,new):将str1中的old全部替换成new

    print("abcda".replace('a','$')) #$bcd$

7.endswith(suffix, beg=0, end=len(string))

检查字符串串是否以 obj 结束,如果beg 或者 end 指定则检查指 定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
其中suffix表示要检查的结尾字符串,beg和end如果默认不写则是比较全部字符串。如果beg和end不为0,那么end必须大于beg。

print("hello world".endswith('ld'))
print("hello world".endswith('l'))
print("hello world".endswith('l',7,10))
'''
结果:
True
False
True
'''

8.expandtabs(tabsize=8)

把字符串中的tab转换成空格,tab符号默认空格是8个

str1='  123   '
print(str1.expandtabs(tabsize=8))


图片.png

9.find(str, beg=0 end=len(string))

检测 str 是否包含在字符串串中,如果指定范围 beg 和 end ,则 检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1

print("hello world".find('l'))
print("hello world".find('a'))
'''
结果:
2
-1
'''

注意:如果字符串有多个要寻找的字符串,那么返回要寻找的字符串第一次出现的值

10.index(str, beg=0, end=len(string))

和find()方法一样,只不过如果str不在字符串中会报⼀个异常.

print('hello world'.index('a'))
图片.png
print('hello world'.index('l'))
图片.png

11.isalnum()

如果字符串里面至少有一个字符,并且所有的字符都是unicode编码但不包括ascii里面除字符和数值的字符则返回True,否则返回False

print('aᥤ'.isalnum())
'''
结果:True
'''


print('!~a'.isalnum())
'''
结果:False
'''

12.isalpha()

如果字符串里面至少有一个字符,并且所有字符都是unicode编码,但是不是ascii码里面非字母的部分则为True,否则为False

print('h中ᥤ'.isalpha())
'''
结果:True
'''

print('3!w'.isalpha())
'''
结果:False
'''

13.isdigit()

如果字符串只包含数字则返回 True 否则返回 False..

print('1一'.isdigit())
'''
结果:False
'''

print('1'.isdigit())
'''
结果:True
'''

14.islower()

如果字符串中包含一个区分大小写的字符,并且所有这些 (区分大小写的)字符都是小写,则返回 True,否则返回 False

print('哈哈h'.islower())
'''
结果:True
'''

print('bBd'.islower())
'''
结果:False
'''

15.isnumeric()

如果字符串中只包含数字字符,则返回 True,否则返回 False(单个字符表示数字都行)

print('1一壹'.isnumeric())
'''
结果:True
'''

print('h1'.isnumeric())
'''
结果:False
'''

16.isspace()

如果字符串中只包含空白,则返回 True,否则返回 False.

print('  '.isspace())
'''
结果:True
'''

print(' s'.isspace())
'''
结果:False
'''

17.istitle()

如果字符串是标题化的(见 title())则返回 True,否则返回 False

print('Hello World'.istitle())
'''
结果:True
'''

print('Hello world'.istitle())
print('你好'.istitle())
'''
结果:False
'''

注意:完全标题化是所有单词首字母大写

18.isupper()

如果字符串中包含至少⼀一个区分大小写的字符,并且所有这些 (区分⼤大小写的)字符都是大写,则返回 True,否则返回 False

print('hH'.isupper())
'''
结果:False
'''

print('不H'.isupper())
'''
结果:True
'''

19.len(string)

返回字符串的长度

print(len('s1\\'))
'''
结果:3
'''

20.lower()

转换字符串中所有大写字符为小写.

print('HaH'.lower())
'''
结果:hah
'''

21.lstrip()

截掉字符串左边的空格或指定字符

print('   hello world ')
图片.png

22.maketrans()

创建字符映射的转换表,对于接受两个参数的简单的调用方 式,第一个参数是字符串,表示需要转换的字符,第二个参数 也是字符串表示转换的⽬目标

dic={'e':'w'}

print('hello'.maketrans(dic))
图片.png

23.max()

返回字符串 str 中最大的字母。

print(max('max中'))
'''
结果:中
'''

24.min()

返回字符串 str 中小的字母,中文也行

print(min('max中'))
'''
结果:a
'''

25.rfind(str, beg=0,end=len(string))

类似于 find()函数,不过是从右边开始查找.

print('hello world'.rfind('d'))
'''
结果:10
'''

26.rindex( str, beg=0, end=len(string))

类似于 index(),不过是从右边开始.

print('hello  world'.rindex('w'))
'''
结果:7
'''

27.rstrip()

删除字符串字符串末尾的空格

print('hello   '.rstrip())
图片.png

28.split(str="", num=string.count(str))

num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符

lst='a+b+c+d'.split('+',2)
print(lst)

'''
结果:['a', 'b', 'c+d']
'''

29. startswith(str, beg=0,end=len(string))

检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。

print('abc'.startswith('a'))  #True
print('abc'.startswith('b'))  #False

30.strip([chars])

在字符串上执行 lstrip()和 rstrip()

print('  abc  '.strip())
图片.png

31.swapcase()

将字符串中大写转换为小写,小写转换为大写

print('abcABC'.swapcase())  #ABCabc

32.upper()

转换字符串中的小写字母为大写

print('abc'.upper())  #ABC

33.zfill(width)

返回长度为 width 的字符串,原字符串右对齐,前面填充0

print('abc'.zfill(20))  #00000000000000000abc

34.isdecimal()

检查字符串是否只包含十进制字符,如果是返回 true,否则返 回 false。

print("10".isdecimal())  #True
print('10x'.isdecmal())  #False

35.translate(table, deletechars="")

根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中

36.splitlines([keepends])

按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表, 如果参数 keepends 为 False,不包含换行符,如果为 True,则 保留留换行符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 1.数据存储形式 计算机以二进制的形式存储 (1).原码:数据的二进制形式 10 --> 1010 原码:0000...
    Deathfeeling阅读 347评论 0 3
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,318评论 0 2
  • 1.什么是字符串 a.使用单引号或者双引号括起来的字符集就是字符串。 b.引号中单独的符号、数字、字母等叫字符 c...
    PIECE_MAN阅读 1,487评论 0 6
  • 这是潘蓝一写的第29篇潘宝贝原创文章 微信:beibaopan 微信公众号:pa...
    潘蓝一阅读 483评论 0 0
  • 每每遇到蹒跚学步的小孩子,在童车里的小孩子,目光总免不了被吸引,目不转眼。直到走远才恋恋不舍收回目光。那些清澈明亮...
    云端儿阅读 253评论 2 1