python字符串

1.什么是字符串(str)

  • 1)字符串
    • 字符串是容器型数据类型(序列);以单引号或者双引号作为容器的标志(引号中所有的内容都属于字符串的元素)
    • 'abc' > 元素分别是'a','b','c'三个元素
    • 'a,b,c' > 元素分别是'a', ',', 'b', ',', 'c'五个元素
    • 特点:不可变(不支持增删改) , 有序(支持下标操作)
  • 2)元素:
    • 字符串中元素又叫字符,python中有字符的概念,但是没有字符类型,长度是1的字符串就可以看成字符.

a.普通字符:

字母/数字/各国的文字和符号等(可以写在引号中的符号)

b.转义字符:

在字符串中在一些特定的符号前加\来表示特殊功能和意义

  • :将\后面的内容转化为字符 \ > \ , ' > ' , " > "
  • \n:换行操作
  • \t:空格操作
  • 注意:转义字符的长度为1

c.编码字符:

\u+4位的十六进制数 - 将4位十六进制数对应的编码值转换为字符

1)字符编码

计算机只有直接存储数字的能力,不能直接存储字符:
当需要计算机存储支付的时候,实质存的是字符对应的固定的数字,这个数字就是字符在计算机中的编码
每一个字符和数字的对应关系叫做编码表

2)ASCII码表和Unicode编码表

  • ASXII码表是由美国国家标准制定的专门针对美国富豪进行编码的,里面值包含一些特殊符号、字母和数字(不包含中文、日语等)
  • ASCII码表中大写字母在小写字母前,且中间不连续
  • python采用的是Unicode编码表:Unicode编码表是对ASCII码表的扩展,包含了世界上所有国家所有语言的符号(又叫万国码)
  • 中文范围:0x4e00 - 0x9fa5

3)字符编码相关方法

  • chr(编码值) - 将编码值转换成字符
  • ord(字符) - 获取字符对应的编码值
    """

练习,如果字符串中想打印引号,可以在引号前加\

str1 = 'abc\'123'  # abc'123
str2 = 'abc\t123'  # abc    123
str3 = 'abc\\123'  # abc\123
str4 = '\u4e00'    # 一

2.字符串操作

1.获取字符 - 和列表获取元素一样

1)获取单个字符

2)字符串切片 - 和列表切片一样

3)遍历

练习:统计一个字符串中小写字母的个数

str2 = 'asdfgASDFGHasd'
count = 0
for str in str2:
   if 97 <= ord(str) <= 122:
       count += 1
print(count)

2.字符串操作

1) + 和 *

  • 字符串1 + 字符串2 -> 将字符串1和字符串2拼接在一起产生一个新的字符串
  • 字符串 * N -> 字符串拼接N次产生一个新的字符串
str1 = 'abc'
str2 = '123'
print(str1 + str2)  # abc123
print(str1 * 3)  # abcabcabc

2)==, !=

print('abc' == 'acb') # False
print('abc' == 'abc') # True

3)> < >= <=

  • 执行两个字符串比较大小(实际上从前往后找到第一组不相等的字符,比较字符的编码值的大小)
  • ‘0’ <= char <= '9' - 判断是否是数字字符
  • 'a' <= char <= 'z' - 判断是否是小写字母
  • 'A' <= char <= 'Z' - 判断是否是大写字母
  • '\u4e00' <= char <= '\u9fa5' - 判断是否是汉字
print('abc' > 'bc')  # False
print('abcf' > 'abcd')  # True
print('何' > '哈')  # True

4)in/not in

  • 字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1(判断字符串1是否是字符串2的子串)
print('ab' in 'abcdef')  # True
print('abcde' in 'abc')  # False
print('ab' in 'agseb')  # False

5)len, max, min, sorted, str

  • 注意:转义字符和编码字符的长度都是1
  • max min求的是字符串中编码最大/最小的字符
  • sorted按照编码大小排序,结果返回的是列表
  • 字符串的转换:所有的数据都可以转换成字符串,转换的时候是将数据放在引号中的
str3 = 'how are you!'
print(len(str3))
print(max(str3))  # y
print(sorted(str3))  # [' ', ' ', '!', 'a', 'e', 'h', 'o', 'o', 'r', 'u', 'w', 'y']

6).r语法

  • 在字符串的最前面加r/R可以阻止字符串中所有的转义字符转义
str4 = r'ad\netrwe\'df\tdjfi'
print(str4)  # ad\netrwe\'df\tdjfi

7)格式字符串

  • 在字符串中用格式占位符表示字符串中不确定的部分

a.语法:

包含格式占位符的字符 % (数据1,数据2,...) - 后括号中数据的个数和类型要和前面格式占位符一一对应

b.格式占位符

  • %s - 字符串

  • %d - 整数

  • %.Nf - 浮点数(N控制小数点后小数的位数)

  • %c - 字符(如果是数字,会将数字当做编码并转义成字符)

  • 注意:所有的数据都可以用%s作为占位符

  • 补充:format
    '{}{名字}{编号}'.format(名字 = '','')

name = input('请输入姓名')
print(name + ',你好!', '%s,你好!'%name)

format的用法

print('{}是一个{}岁的{}'.format('小米','23','女孩子'))   # 小米是一个23岁的女孩子
print('{0}是一个{2}岁的{1}'.format('小米','女孩子','23'))    # 小米是一个23岁的女孩子
print('{name}是一个{age}岁的{gender}'.format(age='23',name='小米',gender='女孩子'))   # 小米是一个23岁的女孩子

字符串的相关方法

1.对齐方式

  • 居中:
    字符串.center(宽度,填充字符=' ')
  • 左对齐:
    字符串.ljust(宽度,填充字符=' ')
  • 右对齐:
    字符串.rjust(宽度,填充字符=' ' )
  • 左填充(用0填充到指定宽度):
    字符串.zfill(宽度) == 字符串.rjust(宽度,0)
str1 = 'abc'
print(str1.center(10,'+'))   # 居中:+++abc++++
print(str1.ljust(10,'+'))   # 左对齐:abc+++++++
print(str1.rjust(10,'+'))   # 左对齐:+++++++abc
print(str1.zfill(10))   # 左填充:0000000abc

2.统计子串的个数

  • 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
str1 = 'how are you! Im fin thank you and you '
print(str1.count('you'))  # 3
print(str1.count('r'))   # 1
print(str1.count('you',0,-5))  # 2  在指定位置的you出现的次数

3.查找指定子串并返回下标

  • 字符串.find(子串) 或者 字符串.index(子串)
print(str1.find('you'))  # 8  不存在不报错
print(str1.index('you'))  # 8  不存在会报错

4.连接:join

  • 字符串.join(序列) - 将序列中的元素用字符串连接产生一个新的字符串
  • 要求序列中的元素必须是字符串,如果是字典,要求key全是字符串
new_str1 = '+'.join('123')
print(new_str1)     # 1+2+3

5.替换

  • 字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3
  • 字符串1.replace(字符串2,字符串3,N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = 'how are you! Im fin thank you and you '
new_str1 = str1.replace('you','YOU')
new_str2 = str1.replace('you','YOU',2)
print(new_str1)   # how are YOU! Im fin thank YOU and YOU
print(new_str2)   # how are YOU! Im fin thank YOU and you

6.字符串切割

  • 字符串1.split(字符串2) - 将字符串2作为切割点切割字符串1
str1 = 'how are you! Im fine thank you and you  '
print(str1.split(' '))  # ['how', 'are', 'you!', 'Im', 'fine', 'thank', 'you', 'and', 'you', '', '']
print(str1.split('!'))  # ['how are you', ' Im fine thank you and you  ']
print(str1.split())  # ['how', 'are', 'you!', 'Im', 'fine', 'thank', 'you', 'and', 'you']

字符串中其它方法

str1 = 'how are you! Im fine thank you and you'
# 将字符串第一个字符大写
print(str1.capitalize())
# 字符串1.endwith(字符串2,开始位置,结束)
# 判断在字符串1中从开始到结束位置,字符串是否以指定字符结尾
print(str1.endswith('you'))   # True
print(str1.endswith('you',0,18))   # False
# 判断在字符串1中从开始到结束位置,字符串是否以指定字符开始
print(str1.startswith('you'))
# 字符串.isalnum()
# 判断一个不为空的字符串中是否所有字符都是字母或者数字
print(str1.isalnum())    #False
# 字符串.isalpha()
# 判断一个不为空的字符串中是否所有字符都是字母或者数字
print(str1.isalpha())    #False
# 判断一个不为空的字符串中是否只包含十进制数字
print(str1.isdecimal())    #False
# 判断一个不为空的字符串中是否只包含数字
print(str1.isdigit())    #False
# 判断一个不为空的字符串中是否全为小写
print(str1.islower())    #False
# 判断一个不为空的字符串中是否全为大写
print(str1.isupper())    #False
# 将字符串中所有小写字符转化为大写
print(str1.upper())     #HOW ARE YOU! IM FINE THANK YOU AND YOU
# 将字符串中所有大写字符转化为小写
print(str1.lower())    #how are you! im fine thank you and you
# 翻转字符串中的大小写
print(str1.swapcase())   # HOW ARE YOU! iM FINE THANK YOU AND YOU
# 删除字符串开始和末尾的空格,有r和l
print(str1.strip())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345