字符串
什么是字符串?
字符串是python中最常用的数据类型,我们可以使用引号""来创建字符串,事实上,再python中加了引导的字符都被认为是字符串!
有四种赋值方式
name="aaa"
age='12'
www="""wyt"""
aaa='''aan'''
print(name,age,www,aaa)
print(type(name),type(age),type(www),type(aaa))
多引号什么作用呢?作用就是多行字符串必须用多引号
mag="""
aaaa
xxx
aasas
aaaa
"""
print(mag)
字符串运算及操作
数字可以进行加减乘除运算,字符串呢?只能进行“相加”和“乘除”运算。
(1)拼接(+)
a="Hello"
b="Python"
print(a+b)
注意,字符串的拼接只能是双方都是字符串,不能跟数字或其他类型拼接
错误方式
age=5000
nema="ws"
print(age+nema)
2.重复
a="Hello"
print(a*3)
HelloHelloHello
[Finished in 0.2s]
3.字符串索引([]以及切片([::])
#注意事项:空格也算一个字符
#元素查找:从左往右数从0开始 或者 从右往左数从-1开始
#########0123456789012345678901234567
a="life is short, I use python"
print(len(a))
#索引
print(a[0])
#查找多个元素
print(a[0:4])
#查找间隔元素
print(a[5:13:2])
#从负数开始取值
print(a[::-1])
#切片
print(a[:13])#从索引值为0开始到第十二个元素
print(a[15:])#从索引值15开始到最后的元素
print(dir())#查找当前所有的变量名
#结果:27
#结果:l
#结果:life
#结果:i hr
#结果:nohtyp esu I ,trohs si efil
#结果:life is short
#结果:I use python
(4)大小写转换
-
str.lower() 转小写
-
str.upper() 转大写
-
str.swapcase() 大小写对换
-
str.capitalize() 字符串首为大写,其余小写
-
str.titl() 以分隔符为标记,首字符为大写,其余为小写
应用
不区分大小写
input_str="AbcA"
aa=input("请输入")
if aa.lower()==input_str.lower():
print("输入正确")
else:
print("输入错误")
(5)字符串格式输出对齐
-
str.center() 居中
-
str.ljust() 左对齐
-
str.rjust() 右对齐
-
str.zfill()
a="Life is short,I use python" print(a.center(35,'*')) *****Life is short,I use python**** #返回一个元字符居中,并使用空格填充长度 width的新字符 print(a.ljust(35,'*')) Life is short,I use python********* #返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 print(a.rjust(35,'*')) *********Life is short,I use python #返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 print(a.zfill(35)) 000000000Life is short,I use python #返回长度为width 的字符串,原字符串 string 右对齐,前面填充0,只有一个参数
(6)删除指定字符
-
str.lstrip()删除左边指定字符
-
str.rstrip()删除右边指定字符
-
str.strip()删除右左两边边指定字符
a="*****Life is short,I use python****" print(a.lstrip("*")) print(a.rstrip("*")) print(a.strip("*")) 结果: Life is short,I use python**** *****Life is short,I use python Life is short,I use python
(7).计数
=COUNTIF(B2:B31, “>=30”)/COUNT(B2:B31)
a="Life is short,I use python"
print(a.count('i'))
# 返回str 在 string 里面出现的次数
print(a.count('i',4,8))
# 在索引值为[4,8) 的范围内 str 出现的次数
结果:
2
1
(8)字符串搜索定位与替换
-
str.find()
和find() 方法一样,只不过如果str不在string中会报一个异常
a="Life is short,I use python"
print(a.index('e'))
print(a.index('e',18))
print(a.index('w')) 没有找到就报异常
结果:
3
Traceback (most recent call last):
18
-
str.replace() 替换
a="Life is short,I use python" print(a.replace('I use','You need')) print(a.replace('t','T')) print(a.replace('t','T',1)) 结果: Life is short,You need python Life is shorT,I use pyThon Life is shorT,I use python [Finished in 0.1s]
(9)字符串条件判断
- isalnum(),字符串由字母或数字组成,
- isalpha(),字符串只由字母组成,
- isdigit(),字符串只由数字组成
In [1]: a = "abc123"
In [2]: b = "ABC"
In [3]: c = 123
In [4]: a.isalnum()
Out[4]: True
In [5]: a.isalpha()
Out[5]: False
In [6]: a.isdigit()
Out[6]: False
In [7]: b.isalnum()
Out[7]: True
In [8]: b.isalpha()
Out[8]: True
In [9]: b.isdigit()
Out[9]: False>>> str = '01234'
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str.isdigit() #是否全是数字,并至少有一个字符
True
>>> str = 'string'
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str.isalpha() #是否全是字母,并至少有一个字符
True
>>> str.islower() #是否全是小写,当全是小写和数字一起时候,也判断为True
True
>>> str = "01234abcd"
>>> str.islower() #是否全是小写,当全是小写和数字一起时候,也判断为True
True
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str = ' '
>>> str.isspace() #是否全是空白字符,并至少有一个字符
True
>>> str = 'ABC'
>>> str.isupper() #是否全是大写,当全是大写和数字一起时候,也判断为True
True
>>> str = 'Aaa Bbb'
>>> str.istitle() #所有单词字首都是大写,标题
True
>>> str = 'string learn'
>>> str.startswith('str') #判断字符串以'str'开头
True
>>> str.endswith('arn') #判读字符串以'arn'结尾
True
(10).制表符转化
str.expandtabs()
a="L\tife is short,I use python"
print(a.expandtabs())
# 默认将制表符转化为8个空格
print(a.expandtabs(4))
# 加上参数,将制表符转化为对应个数的空格
结果:
L ife is short,I use python
L ife is short,I use python
(11)ASCII码和字符的转化
- chr():用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
- ord():将一个ASCII字符转换为对应的数字
chr(65)
#结果:'A'
ord('a')
#结果:97
(12)字符串分割变换
- join() 将指定字符插入新元素之间
- split()以指定字符分隔序列且去除该字符
- partition() 以指定字符分隔序列且包含该字符
以>>> str="learn string"
>>> '_'.join(str)
'l_e_a_r_n_ _s_t_r_i_n_g'
>>> li=["learn","string"]
>>> '_'.join(str)
'l_e_a_r_n_ _s_t_r_i_n_g'
>>> '_'.join(li)
'learn_string'
>>> str.split('n')
['lear', ' stri', 'g']
>>> str.split('n',1)
['lear', ' string']
>>> str.rsplit('n')
['lear', ' stri', 'g']
>>> str.splitlines()
['learn string']
>>> str.partition('n')
('lear', 'n', ' string')
>>>
补充:
string模块
查看:
>>> import string
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.capwords('hUNAN yingxiao colllega')
'Hunan Yingxiao Colllega'
>>> string.digits
'0123456789'
>>> string.hexdigits
'0123456789abcdefABCDEF'
>>> string.octdigits
'01234567'
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>>
"%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%)。
下面整理了一下Python中字符串格式化符合:
格式化符号 | 说明 |
---|---|
%c | 转换成字符(ASCII 码值,或者长度为一的字符串) |
%r | 优先用repr()函数进行字符串转换 |
%s | 优先用str()函数进行字符串转换 |
%d / %i | 转成有符号十进制数 |
%u | 转成无符号十进制数 |
%o | 转成无符号八进制数 |
%x / %X | 转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写) |
%e / %E | 转成科学计数法(e / E控制输出e / E) |
%f / %F | 转成浮点数(小数部分自然截断) |
%g / %G | %e和%f / %E和%F 的简写 |
%% | 输出% (格式化字符串里面包括百分号,那么必须使用%%) |
这里列出的格式化符合都比较简单,唯一想要强调一下的就是"%s"和"%r"的差别。
格式化操作符
>>> a=15
>>> print(("%d to hex is %x") % (a,a))
15 to hex is f
>>> "%x" % 15
'f'
>>> "%f" % 15
'15.000000'
>>> "%e" % 15000
'1.500000e+04'
>>> "%d" % 100
'100'
>>> "%d%%" % 100
'100%'
>>>
看个简单的代码:
name=input("name:")
age=input("age:")
job=input("job:")
hobbie=input("hobbie:")
info='''
---info of%s---
Name :\t %s
Age :\t %s
job :\t %s
Hobbie:\t %s
------end------
'''%(name,name,age,job,hobbie)
#这行的%号就是把前面的字符串与括号后面的变量关联起来
print(info)
列表
列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:
li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]
列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。
特点: 是一个有序的,可以重复的序列,可变类型。
1.创建一个空列表
>>> list1=[]
>>> print(type(list1))
<class 'list'>
>>>
2.创建一个有多个值的列表,每个值用逗号隔开
lit1=[18,25,16,22,28]
列表也可以存放不同类型的元素。
lst2=[18,"str",[1,2,3],(66,67),{'name':'Tom','age':18}]
4.列表的拼接
lisst + list
5.列表的重复
list * 3
列表索引和切片
>>> lst2=[18,"str",[1,2,3],(66,67),{'name':'Tom','age':18}]
>>> len(lst2)
5
>>> lst2[0]
18
>>> lst2[3]
(66, 67)
>>> lst2[3:]
[(66, 67), {'name': 'Tom', 'age': 18}]
>>> lst2[0::2]
[18, [1, 2, 3], {'name': 'Tom', 'age': 18}]
>>>
列表 :
names=['a','b','c','d']
1.增加
append(),extend(),insert()
- 1)append(),增加到最后
>>> names = ['a','b','c','d']
>>> names.append('e')
>>> names
['a', 'b', 'c', 'd', 'e']
>>> names = ['a','b','c','d']
>>> names.append([1, 2, 3])
>>> names
['a', 'b', 'c', 'd', [1, 2, 3]]
- 2)extend(),迭代的去增
>>> names = ['a', 'b', 'c', 'd']
>>> place = ['beijing', 'shandong', 'usa']
>>> names.extend(place)
>>> names
['a', 'b', 'c', 'd', 'beijing', 'shandong', 'usa']
>>>
- 3)insert(),按照索引去增加
>>> names = ['a', 'b', 'c', 'd']
>>> names.insert(2,'devilf')
>>> names
['a', 'b', 'devilf', 'c', 'd']
- 4)其他的插入方法:
>>> names[3] = 'lebron'
>>> names
['a', 'b', 'devilf', 'lebron', 'd']
2.删除
pop,remove,del,cleaer
- 1)pop()
>>> names=['a','b','c','d']
>>> names.pop()#如果没有指定下标,则默认会删除最后一个元素
'd'
>>> names
['a', 'b', 'c']
>>> names.pop(2)#指定索引时,就会删除索引对应的元素
'c'
>>> names
['a', 'b']
>>>
- 2) remove() 按照元素删除
>>> names=['a','b','c','d','f','e']
>>> names.remove('e')
>>> names
['a', 'b', 'c', 'd', 'f']
>>>
- 3) del
>>> names=['a','b','c','d','f','e']
>>> del names[4]
>>> names
['a', 'b', 'c', 'd', 'e']
>>>
- 4) clear()
>>> names=['a','b','c','d','f','e']
>>> names.clear()
>>> names
[]
3.改
>>> li=['a','b','c','d']
>>> li[1]='cc'
>>> li
['a', 'cc', 'c', 'd']
>>> li[0:2]=['aa','bb']在所有0到2之间 包头不包尾
>>> li
['aa', 'bb', 'c', 'd']
>>>
4.查
切片去查,或者,循环去查
- 索引,切片,遍历
其他操作:
1.查找元素所在位置:index()
>>> names=['a','b','c','d','f','e']
>>> names.index('c')
2
>>>
2.统计元素的次数:count()
>>> names=['a','b','c','d','f','e']
>>> names.append('d')
>>> names.count('d')
2
3.反转:reverse()
>>> names=['a','b','c','d','f','e']
>>> names.reverse()
>>> names
['e', 'f', 'd', 'c', 'b', 'a']
>>>
4.排序:sort() 按照ascii码来进行排序
>>> names=['a','b','c','d','e']
>>> names.insert(3,'&&')
>>> names
['a', 'b', 'c', '&&', 'd', 'e']
>>> names.sort()
>>> names
['&&', 'a', 'b', 'c', 'd', 'e']
>>>
>>> names.sort(reverse=True)
>>> names
['e', 'd', 'c', 'b', 'a', '&&']
>>>
5.对列表进行切片处理
- 1)列表所有的元素
>>> names=['a','b','c','d','e']
>>> names[::]
['a', 'b', 'c', 'd', 'e']
>>>
- 2)列出最后一个元素,从中间位置开始,列出后面所有的元素
>>> names=['a','b','c','d','e']
>>> names[-1]
'e'
>>>
names=['a','b','c','d','e']
>>> a=int(len(names)/2)
>>> names[a:]
['c', 'd', 'e']
>>>