python字符串

一、字符串和字符

1.什么是字符串(str)

字符串是容器型数据类型, 将''/""/''''''/""""""作为容器标志,容器中的元素全是字符

不可变的(不支持增删改)、有序(支持下标操作)

str1 = 'hello\n123'
str2 = "你好"
str3 = '''thanks
123
456'''
str4 = """谢谢"""
print(type(str1), type(str2), type(str3), type(str4))
print(str1)
print(str3)

2.字符串中的元素 - 字符

python中只有字符的概念,没有对应的数据类型。引号中只有一个元素的字符串可以看成一个字符

字符串又叫字符集

1)字符串中的字符 - 原则上任何可以通过键盘输入或者从其他地方赋值粘贴的所有的符号都可以作为字符

'和健身房'、'shuASSS'、'2378'、'+-===!@&*#@'、'♠'

a.普通字符: 在字符串中能够代表符号本身的字符(没有特殊意义和特殊功能的符号)

b.转义字符: 在字符串中有特殊意义和特殊功能的符号的组合,一般是以\开头的

\n - 换行
\' - 表示'本身
\" - 表示"本身
\t - 表示一个缩进(tab键)
\\ - 表示一个\

注意: 所有的转义字符的长度都是1

c.编码字符

\u四位的16进制数 - 编码字符(获取4位16进制数作为编码值对应的字符)

2)阻止转义: 在字符串的最前面加r/R可以让当前字符串中所有的转义字符失效(所有的符号在字符串中都表示这个符号本身)

str1 = 'abc\n123'
print(str1)

str2 = 'abc\'1\"23'
print(str2)

str3 = '\tabc'
print(str3)

str4 = 'abc\\n123'
print(str4)

str5 = 'abc\u4eff'
print(str5)

str6 = R'\tabc\n\'123'
print(str6)

3.字符编码

计算机不能直接存储字符(符号),只能存储数字;

为了能够存储字符,把每一个字符关联了一个固定的数字(这个固定的数字就是对应的字符的编码)

字符和数字和一一对应关系就是编码表:ASCII码表,Unicode编码表(python)

1) ASCII码表 - 在计算机中采用一个字节保存一个字符(总共128个字符), 字符包含了所有的字母、数字和美国常用符号

0 ~ 9: 编码值从48开始依次增加
大写字母的编码值 < 小写字母的编码值
大写字母和小写字母不是紧挨着的

2) Unicode编码表是ASCII码表的扩展, 包含了世界上所有的国家、所有的语言对应的符号(总共有65536个符号)

ASCII码: 0 ~ 127
中文编码值范围: 0x4e00 ~ 0x9fa5

(1)编码字符: \u4位16进制编码值

str1 = 'abc\u50ff'
print(str1)

(2)chr(编码值) - 获取编码值对应的字符

print(chr(97))

num = 0
for x in range(0x4e00, 0x9fa5+1):
    print(chr(x), end=' ')
    num += 1
    if num % 30 == 0:
        print()

print()
for x in range(0x0F00, 0x0FFF+1):
    print(chr(x), end=' ')

print()

for x in range(0x2400, 0x243F+1):
    print(chr(x), end=' ')

print()

(3)ord(字符) - 获取指定字符对应的编码值

print(hex(ord('李')))
print(hex(ord('四')))

二、字符串操作

1.查 - 获取字符 (和列表获取元素的方式一样)

1)获取单个字符: 字符串[下标]

2)切片: 字符串[开始下标:结束下标:步长]

3)遍历: 直接变量元素、通过下标遍历

注意: 一个空格是一个字符; 按tab键是4个空格,对应4个字符; \t对应一个字符

获取单个字符

str1 = '\thello Python!'
print(str1[-2])    # n
print(str1[2])     # e
# print(str1[100])   # IndexError: string index out of range

切片

print(str1[2:])     # ello Python!
print(str1[1:-1:2])  # hloPto
print(str1[:3:-1])   # !nohtyP ol

遍历

for x in str1:
    print('x:', x)
"""
for 下标,元素 in enumerate(序列):
    循环体
"""
for index, item in enumerate(str1):
    print(index, item)

2. 相关操作

1)运算符:

a. +, *

str1 = 'abc'
str2 = '123'
print(str1 + " " + str2)   # abc 123
print(str1 * 3)   # abcabcabc

b. ==, !=

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

>, <, >=, <=

字符串1 > 字符串2

字符串比较大小比较的是字符串编码值的大小

"""
判断字符是否是小写字母: 'a'<= char <= 'z'
判断字符是否是大写字母: 'A'<= char <= 'Z'
判断字符是否是字母: 'A' <= char <= 'Z' or 'a'<= char <= 'z'
判断字符是否是中文: '\u4e00' <= char <= '\u9fa5'
判断字符是否是数字: '0' <= char <= '9'
"""
print('abcdef' > 'bc')   # False
print('Z' < 'a')    # True
print('abaaaa' < 'aczzzzzz')   # True

char = input('请输入一个字符:')
if '\u4e00' <= char <= '\u9fa5':
    print(char, '是中文')
else:
    print(char, '不是中文')

练习: 输入一个字符串,判断这个字符串是否是中文字符串(全是中文)

value = input('请输入:')
for char in value:
    if not '\u4e00' <= char <= '\u9fa5':
        print('非中文字符串')
        break
else:
    print('是中文字符串')

2) in / not in

字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1

str3 = 'abc 123'
print('b' in str3)   # True  10 in [10, 20, 30]
print('abc' in str3)  # True  [10, 20] in [10, 20, 30]  -> False
print('ac' in str3)   # False

3)相关函数: len, str, sorted, reversed

a.len(字符串)

print(len('\tabc\n123\u4eee'))    # 9
print(len(' abc123'))       # 7
print(len(' '))      # ' ' -> 1; '' -> 0

b.str(数据) - 所有数据都可以转换成字符串; 直接将数据的打印值加引号

a = 100
str(a)          # '100'
str(True)       # 'True'
list1 = [10, 20, 30]
str4 = str(list1)     # '[10, 20, 30]'
print(len(str4), str4[0])     # 12  [

c.sorted(字符串)

str5 = 'pythonH12QWz'
list2 = sorted(str5)
print(list2)   # ['1', '2', 'H', 'Q', 'W', 'h', 'n', 'o', 'p', 't', 'y', 'z']
print(''.join(list2))   # 12HQWhnoptyz

三、格式化字符串

1.格式占位符

"""
a.语法: 包含格式占位符的字符串 % (值1, 值2, 值3,...)  
b.说明:
格式占位符 - 格式占位符有哪些是固定,使用的时候和字符串中变化的数据的类型相关
           %s  - 字符串(任何类型都可以使用%s占位)
           %d  - 整数; 
           %-Nd - 整数; N约束数字最后的长度,如果不够后面补空格
           %Nd  - 整数; N约束数字最后的长度,如果不够前面补空格
           %f   - 浮点数;小数点后面保留6位小数
           %.Nf - 浮点数, N约束小数点N后的小数位数(会四舍五入)
           %c   - 字符
% - 固定写法
() - 固定写法;如果值的个数是1可以省略
值 - 任何有结果的表达式; 值的个数和类型和前面占位符的个数以及类型保持一致
"""
# name = input('请输入姓名:')
name = '张三'
# age = int(input('请输入年龄:'))
age = 20
# 你好,我是xxx,今年x岁
# 方法一:
print('你好,我是'+name+',今年'+str(age)+'岁')
print('你好,我是%s,今年%4d岁, 工资:%.2f, %s, %f, %c, %c' % (name, age, 3.1495926, 2.348, 1.25, 'Z', 97))

2.format

一个带有{}的字符串.format(值1, 值2, 值3,...)

用法1: 让空的{}个数和format中值的个数保持

print('我是{}, 今年{}岁'.format('余婷', 18))

用法2: {N} - N从0开始依次增加,分别表示format中第0个值,第1个值,...

print('我是{0},年是:{1}, 今年{1}岁'.format('余婷', 18))
print('数据1:{1}, 数据2:{0}, 数据3:{1}'.format(10, 20))   # 数据1:20, 数据2:10, 数据3:20

用法3: [key]

'{key1}, {key2}'.format(key1=值1, key2=值2) -> '值1, 值2'

print('我是{name},年龄是:{age}, 今年{age}岁'.format(age=20, name='张三'))

用法4: 用列表元素给占位符赋值(了解)

list1 = [10, 20, 30, 40]
print('{0[1]},{0[0]},{0[3]}'.format(list1))
print('{1[0]}, {1[1]}, {1[1]}, {0}'.format('张三', list1))
print('{list[1]},{list[2]},{list[3]}'.format(name='张三', list=list1))

用法5: 用字典的值给占位符赋值(了解)

student = {'name': '小明', 'age': 20, 'id': '001', 'score': 100}
print('{name}今年{age}岁,学号:{id}, 考了{score}'.format(**student))
# format(**student) --> format(name='小明', age=20, id='001', score=100)

其他的写法:

约束小数位数

print('圆周率:{:.2f}'.format(3.1415926))   # 约束小数位数

约束整数宽度

print('整数:{:0>4d}。'.format(25))    # 整数:0025
print('整数:{:0<4d}。'.format(25))    # 整数:2500。
print('整数:{:+>4d}。'.format(25))    # 整数:++25。

分隔

print('大的整数:{:,}'.format(100000000))   # 大的整数:100,000,000

百分比

print('百分比:{:.2%}'.format(0.25))   # 百分比:25.00%

四、字符串相关方法

1.字符串.capitalize() - 将字符串的首字母变成大写字母

str1 = 'python'
new_str1 = str1.capitalize()
print(new_str1)

# 97 - 65  == 32; 98-66 == 32
char = 'j'
print(chr(ord(char)-32))

2.center/ljust/rjust/zfill

"""
字符串.center(宽度, 填充字符)   # xabcx
字符串.ljust(宽度, 填充字符)    # abcxx
字符串.rjust(宽度, 填充字符)    # xxabc
字符串.zfill(宽度) == 字符串.rjust(宽度, '0') 
"""
print('abc'.center(7, '+'))   # ++abc++
print('abc'.ljust(7, '+'))    # abc++++
print('abc'.rjust(7, '+'))    # ++++abc
print('abc'.zfill(7))         # 0000abc
# 001, 004, 009, 023, 045, 102
num = 21
print(str(num).zfill(3))

3.

字符串1.count(字符串2) -> 统计字符串1中字符串2出现的次数

字符串1.count(字符串2,开始下标,结束下标) - 统计字符串1开始下标到结束下标范围内字符串2出现的次数

str2 = 'how are you? i am fine! thank you!'
print(str2.count('you'))   # 2
print(str2.count('a'))     # 3

print(str2.count('you', 0, 15))   # 1
print(str2.count('you', 0, 4))    # 0

4.

str1 = 'you'
str2 = 'how are you'
# 判断str2是否以str1结尾
print(str2[-len(str1):] == str1)

5.字符串查找

"""
字符串1.find(字符串2) - 获取字符串2第一次在字符串1出现的位置(用大于等于0的下标值表示);
                      字符串2不存在结果是-1
字符串1.index(字符串2) - 获取字符串2第一次在字符串1出现的位置(用大于等于0的下标值表示);
                       字符串2不存在会报错
"""
str2 = 'how are you? i am fine! thank you!'
print(str2.index('you'))   # 8
print(str2.find('you123'))    # 8
print(str2.find('you123'))   # -1
# print(str2.index('you123'))  # ValueError: substring not found

6.join

"""
字符串.join(序列)  - 将序列中的元素用字符串连接在一起产生一个新的字符串;
                   序列中的元素是字符串
"""
str3 = '+'.join('abc')
print(str3)    # a+b+c

str4 = ''.join(['name', 'age', 'gender'])
print(str4)

str5 = ''.join({'a': 1, 'b': 1})
print(str5)    # ab

7.字符串替换

"""
1) 字符串1.replace(字符串2, 字符串3)   -> 将字符串1中所有的字符串2都替换成字符串3
2) 
字符串1.maketrans(字符串2,字符串3)  -> 创建字符串2和字符串3一一对应的映射表
字符串1.translate(替换的映射表) 
"""
str2 = 'how are you? i am fine! thank you!'
new_str2 = str2.replace('you', 'me')
print(new_str2)   # how are me? i am fine! thank me!

# 创建映射表
table = str.maketrans('a!', 'b+')
new_str2 = str2.translate(table)   # 将字符串str2中所有的a都替换成b, 所有的!都替换成+
print(new_str2)

8.字符串切割

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

推荐阅读更多精彩内容

  • 1.什么是字符串 序列,有序,不可变的。用单引号或者双引号括起来的任意字符集。 2.字符串中的字符 a.普通字符:...
    发家致富靠养猪阅读 624评论 1 7
  • 1.什么是字符串序列,有序,不可变的用单引号或者双引号任意字符集, 2,字符串中的字符普通字符:'23', 'sd...
    哗啦噼里啪啦阅读 409评论 0 0
  • 一、字符串和字符 1.什么是字符串(str) 字符串是容器型数据类型, 将''/""/''''''/""""""作...
    穷到没有姓名阅读 154评论 0 0
  • 结束了五一小假,我踏上了回校的路 ,在广州这个地铁发达的城市,无论去哪里几乎都会选择地铁,像往常那样戴着耳机听着民...
    阿仙w阅读 106评论 0 0
  • 起床了……1分钟.5分钟……30分钟过去了……还是在赖床…嘻嘻! 我们常常在自己的脑子里设定一些规定,以为...
    媛芒果阅读 1,035评论 0 1