2019-11-13 字符串相关

字符串和字符

1.什么是字符串(str)

字符串是容器型数据类型,将''或者""或者''''''或者""""""作为容器标志,
容器中的元素全是字符;
不可变的(不支持增删改),有序(支持下标操作)



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

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

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

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

汉字,字母,数字,表情,符号,表情♠,

a.普通字符:在字符串中能够代表符号本身的字符(没有特殊意义和特殊功能的符号)
b.转义字符:在字符串中有特殊意义和特殊功能的符号的组合,一般是以\开头的

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

注意:所有的转义字符都算一个字符(长度都是1)

c.编码字符

2)阻止转义:在字符串的最前面加r/R可以让当前字符串中所有的转义字符失效

(所有的符号在字符串中都表示符号本身)

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

print('=====================================')
str1 = 'ab\nc'
print(str1)

str2 = 'a\tbc\'123'
print(str2)

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

str5 = 'abc\uf0ff'
print(str5)

str6 = '\tabc\n\'123'
str6 = r'\tabc\n\'123'
print(str6)
"""1.
    abc
'123
2.\tabc\n\'123
"""

3.字符编码

计算机不能直接存储字符(符号),只能存储数字;为了能够存储字符,把每个字符关联了一个特定的数字。
(这个固定的数字就是字符对应的编码)

字符和数字的一一对应关系就是编码表:ASCII码表,Unicode编码表(python)
1)ASCII码表 - 在计算机中采用一个字节保存一个字符(128个字符),字符包含了所有的字母数字和美国常用符号

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

2)Unicode编码表是ASCII码表的扩展,包含了世界上所有的国家,所有的语言对应的符号。
总共有66636个符号。
中文编码值范围:0x4e00~0x9fa5

1.编码字符:\u4位的16进制字符

str1 = 'abc\u57ff'
print(str1)

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

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

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

print(hex(ord("Ć")))
print(hex(ord("揽")))
print(hex(ord("月")))

字符串操作

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

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

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

3)遍历:直##历元素、通过下标遍历

# 注意:一个空格是一个字符 按tab键是4个字符 但是/t 是一个字符
# 获取单个字符
str1 = '\thello python!'
print(str1[-2])  # n
print(str1[2])  # e
# 如果超出会报错out of range

# 切片
print(str1[2:])  # ello python!
print(str1[1:-1:2])  # hlopto
print(str1[:3:-1])  # hlopto

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

2.相关操作

1)运算符:

# a. +,*
print('abc')
str1 = 'abc'
str2 = '123'
print(str1 + " ", str2)
print(str2 * 3)

# b. ==,!=,is
print('abc' == 'abc')  # 顺序 值 都要一样

# >,<  >=,<=
# 字符串1 > 字符串2
# 字符串比较大小  比较的是字符串编码值的大小
print('abcdef' > 'bc')

判断字符是否是小写字母:'a'<=char<='z'
判断字符是否是大写字母:'A'<=char<='Z'
判断字符是否是字母:'a'<=char<='z' or 'A'<=char<='Z'
判断字符是否是中文:'\u4e00'<=char<='\u9fa5'
判断是否是数字:'0'<=char <='9'

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

char = input("请输入一个字符串:")
check = 0
length = len(char)
for x in char:
    if '\u4e00' <= x <= '\u9fa5':
        check += 1
if check == length:
    print("全是中文")
else:
    print("并非全中文!")

2)in/not in

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

str3 = 'abc 123'
str4 = 'b'
print(str4 in str3)  # True
print('abc' in str3)  # True
print('ac' in str3)  # False

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

a.len(字符串)

print(len(''))  # 0
print(len(' '))  # 1

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

a = 100
str(a)  # '100'
str(True)  # 'True'
list1 = [10, 20, 30]
str4 = str(list1)  # "[10,20,30]"
print(len(str4)) # 12  按标准格式来转换

c. sorted(字符串) 产生一个新的列表

str5 = 'python'
list2 = sorted(str5)
print(str5,sorted(str5))  # python ['h', 'n', 'o', 'p', 't', 'y']
print("".join(list2)) # hnopty

格式字符串

1.格式占位符

a.语法:包含格式占位符的字符串 %(值1,值2,值3)

b.说明:

格式占位符 - 格式占位符有哪些是固定的,使用的时候和字符串中变化的数据类型相关
%s 字符串【eg 名字】(任何类型其实都可以使用)
%d 对应整数;
%-Nd 对应整数;N约束数字最后的长度,如果不够后面补空格
%Nd 对应整数;N约束数字最后的长度,如果不够前面补空格
%f 对应浮点数(小数点后保留6位)
%.Nf 浮点数;N约束小数点N后的小数位数(默认6位)
% 固定写法
() 固定写法;值的个数是1 可以省略
值 任何有结果的表达式;值的个数和类型须和前面占位符的个数及类型保持一致
%c 字符

name = input('请输入姓名:')
age = int(input('请输入年龄:'))
name = '1'
age = 1
你好,我是XXX,今年X岁
print('你好我是'+name)
print('你好我是%s,今年%d岁,工资是%.2f,%c' % (name, age, 10000, 97))

2.format

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

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

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

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

print('我是{0},年龄是:{1},今年{1}岁'.format('毓婷', 18))
print('数据1;{1},数据2:{0},数据3:{1}'.format(10, 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[1]},{1[0]},{0}'.format('1', list1))

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

student = {'name':'大黄','age':3,"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.1423443322222))  #约束小数位数
print('整数:{:0>3d}。'.format(25))    #整数:025。 {:xNd}  >是在前面补0 <是在后面补0
print('整数:{:0<3d}。'.format(25))     #整数:250。
print('整数:{:+>4d}。'.format(25))     #整数:++25。

分割

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

百分比

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

字符串相关方法

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

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

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

num = 2  # 学号填充之前的00
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))

4.

str1 = 'abc'
str2 = 'how are you'

# 判断是否以1结尾
print(str2[-len(str1):]==str1)

5. 字符串查找

字符串1.find(字符串2)  - 获取字符串2第一次在字符串1中出现的位置(用正字符串表示)
                        字符串2不存在的结果是-1
字符串1.index(字符串2) 字符串2不存在会报错 substring not found

str2 = 'how are you? i am fine! Thank you '
print(str2.index('you'))   # 8
print(str2.find('you'))    # 8

6.join

字符串.join(序列) - 将序列中的元素用字符串连接在一起产生一个新的字符串;
序列中的元素是字符串

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

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

str5 = ''.join({'a':1,"b":1})  # 把key串起来
print(str5)

7.字符串替换

字符串.translate()

1)字符串1.replace() ->将字符串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+')    # 将字符串str2中所有的a都替换为b
new_str2 = str2.translate(table) # 所有的?都替换为+
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']

你可能感兴趣的:(2019-11-13 字符串相关)