字符串str

1)字符串介绍

1.使用单引号包裹起来的字符就是字符串

例如

a='1b' b='2a'

字符串不可以被更改,例如如下,

>>> a='1'
>>> a='2'

这里a实际已经不是原来的a了,在内存中的位置已经不一样了

2.字符串可以使用 “+”,进行拼接,
>>>a='a'
>>>b='b'
>>> c=a+b
>>> print (c) ab

"*"进行重复操作

>>>b *3
’bbb’
3.字符串识别成员操作符: in/not in
(in :如下字符串a在变量a中,输出真)
>>>a='abc'
>>> 'a' in a
True
>>> 'd' in a
False(not in:如下字符串d,不在变量a中,则输出真,在的话输出假)
>>>'d' not in a True

2)字符串输出

#代码如下
name='ajbn'
age=20
work='运维工程师'
print("姓名:%s"%name)
print("年龄:%d"%age)
print("工作是:%s"%work)

运行测试如下

姓名:ajbn年龄:20
工作是:运维工程师
>>>

3)字符串输入

#代码如下
name=input('输入你的名字')
print("你的名字是:%s"%name)

测试如下

输入你的名字ajbn
你的名字是:ajbn

4)下标和切片

1.下标

1) 字符串下标的概念

字符串可列表都是可以通过index索引或者下标的形式用来访问数据的
例如

>>> a='qwe'

例如,上面a的值,'q'的下标就是0,'w'的下标就是’1’,’e'的下标就是2

以此类推,下标都是从0开始,

2)下标的查询语法
>>>a[0]
’q’

后面的0就是下标数字,

2.切片

对操作的对象截取其中的一部分操作
基本格式如下

slice(start, stop[, step])
start:开始值,不填默认0,取到该值
 stop:结束值,不填取到最后一个,填的的话取不到该值取到前一个,可以超过最大的数值
 step:步长默认为1(一个目标至下一个目标的差),类似range函数,可以为负数

举例如下

>>> name='ajbn66'
>>> print (name[0:3])

ajb

(输出0~2地标的字符,类似range函数,后面的只会输出到前一位,就是下标2 前面地标0一定会输出)
>>>print(name[:3])

ajb

(不写前面的,起始值,默认从下标0,开始)
>>> print(name[0:]) ajbn66
(不写后面的,结束值,默认输出到最后的下标)>>>print(name[:]) ajbn66
(全部不写,下标从0开始,输出全部字符串)>>> print (name[0:4:2]) ab
(从下标0开始,输出到下标3,步长为2表示每隔一个字符输出一个字符依次类推,步长3就是隔两个字符输出一个字符
当然也可反正打印出字符串
>>>p='APACHE'
>>> print (p[5:-7:-1]) EHCAPA

(这里解释一下,5是正着数那个’E’的下标,解释一下后面结束值,是-7
因为,因为0是正着排的第一个,而倒着排’E’,就是’-1‘,到’A’,是-6’,而要显示’A’,必须填‘-7’
这里和range函数不太一样)

5)字符串常见操作(内置方法)

字符串属于不可变类型,以下的方式是使用特殊的方式打印出来
其原来变量的值并不会改变的,如果需要使用,
需要给原来变量从新赋一个新的值
1 .capitalize()
使字符串的首字母大写,其余字母小写
>>>u='AJBN'
>>>print(u.capitalize())
Ajbn
(后面的u.capitalize,u是变量名)如果字符串的首字母不是英文,则后面的全小写
>>>a='123AJBN'
>>> print(a.capitalize())
123ajbn
2 .casefold()
使字符串里的字母全小写,不管其他字符是否为其他形式
>>>I='098AJBN好'
>>> print(I.casefold())
098ajbn好
3 . center (.center(width, fillchar))

将字符串中原来的内容居中显示(打印)

width表示整体的长度,fillchar表示需要添加打印的字符用来填补字符串要达到width的长度,fillchar默认是空格,
>>> k='AJBN123好'
>>> print (k.center(20,'*'))下面这是输出结果,长度一共是20,中间是字符串内容,其他地方以“*”号显示,当然你也可以把“*”,换成其他任何的字符或数字,注意要以 ' '或" "包裹
******AJBN123好******
4 .count (.count(,start,end))

计算指定字符在字符串中出现的次数,不写默认从0至结尾
start 开始的下标(能取到),end 结束的下标(取不到,不写取到字符串最后)

例如
>>> C='AJBN66666'

>>> print(C.count('6',0,6))
2
(查找字符串’6‘的出现次数,从下标0,开始到下标5,输出2,出现了2次)
5 .endswith (.endswith(,start,end))

查询字符串中是否以指定字符结尾,返回bool值,end的下标取不到,不写end的值可以取到

>>>H='www baidu'
>>>print (H.endswith('a',0,6))
True
从下标0开始,到下标5,测试是否已'a'结尾,是返回真,不是返回假,空格也算一个地标
6 .find (.find(start,end))

查找指定字符在字符串中出现的第一个下标,如果没有返回 ‘-1’,
end默认不写,取到最后,和上面一样

>>> L='AAA III'
>>> print (L.find('I')) 4

如上例子,查找’I‘字符串在字符串出现的第一个下标,并打印,如果多个’I‘ 只会输出从左到右第一个的下标

7 .index (.index(start,end))

返回指定字符在字符串中出现的第一个下标,end 默认不写取到最后,
取不到改下标,和find()方法一样,只不过指定字符不存在的话index方式会报错

>>> F='nihao xiaoming//'
>>> print(F.index('i',0,2))
1


(如上,i的地标是‘1’,筛选范围在地标0~1之间)

8 .isalnum()

判断是否为字母或者数字,返回布尔值

>>> O='love99 master'
>>> print(O.isalnum())
False
(上面O变量,因为中间有空格,所以返回假)

下面这个就对了

>>>L='love996'
>>>print(L.isalnum())
True
9 .isalpha()

判断是否是纯字母,返回布尔值

>>>A='aAaI'
>>>print (A.isalpha())
True
10.判断字符串是否是十进制
>>>Z='10'
>>>print(Z.isdecimal())
True

(注意只可以是字符串,不可以写数字)

11 .isdigit()

判断字符串是否是纯数字

(如下,有小数点也不算是纯数字)
>>> K='255.255'
>>> print (K.isdigit())
False>>> K='255'
>>> print(K.isdigit())
True
12 .islower()

判断是否全小写,数字不影响判断

>>> S='st9'
>>>print(S.islower())
True

(下面这里有大写字母,返回假)

>>>S='sTr'
>>> print(S.islower())
False
13 .isupper()

判断字母是否全大写,符号和数字不影响

>>> Y='III123*'
>>> print(Y.isupper())
True
14 .join(iterable)
将可迭代对象用字符串进行分隔,如果是列表分隔,则会显示为字符串,但本质不会改变
>>>I='123qwe'
>>>print(';' .join(I))
1;2;3;q;w;e>>> print(',' .join(I))
1,2,3,q,w,e15 .split(sep=None, maxsplit=-1)
删除字符串(列表不可以)中的sep,并返回一个列表;以str为分隔符切片string,如果num有指定值,则仅分隔 num+ 个子字符串

就是使用特定的符号或者其他分隔原来的字符串显示成列表的形式

>>>n='www;baidu;com'
>>> print (n.split(';'))
[‘www’, ‘baidu’, ‘com’]

列表list

列表是可变的类型,对列表做的,增加,删除,改变等操作,会改变原来的变量的值
1) 创建列表的方法

使用[ ]包裹,中间需要使用英文逗号, 分隔,中间的值可以是任意都可以,没有限制

>>>l=[1,2,3]
>>> print (type(l))
<class ‘list’>
>>>print (l)
[1, 2, 3]
2) 工厂函数,转换

可以将其他类型转换成列表的形式

>>>k='w12'
>>>print (type(k))
<class ‘str’>
>>>l=list(k)
>>> print (type(l))
<class ‘list’>
>>>print (l)
[‘w’, ‘1’, ‘2’]
3)列表的长度,len(列表名)

求列表有几段,从1开始,不是下标的概念

>>>l=[1,2,3]
>>>print (len(l))
3

4)列表操作 查

1.通过下标
>>>l=['w1','w2','w3','w4','w5','w6']
>>>print (l[0])
w1
>>> print (l[1])
w2

也支持切片的操作

>>> print (l[0:2]) [‘w1’, ‘w2’]
2.通过for循环
oldlist=['xiaoming','xiaohong','xiaolan']
for i in oldlist:
    print (i)

运行测试,结果如下

xiaomingxiaohong
xiaolan
3.通过while循环
newlist=['xiao1','xiao2','xiao3']
i=0
while i<3:
    print (newlist[i])
    i=i+1

运行测试

xiao1xiao2
xiao3
4.成员操作符 in , not in
>>>a=['w1','w2','w3']
>>> 'w1' in a
True
5.通过元素查找下标index(obj,start,stop)

start开始的下标可以取到,stop下标取不到取前一个,默认不写取到最后

如下,查找’w1’字符串在列表中的地标从地标0到地标2之间查找

>>> l.index('w1',0,3) 0

(如上w1的地标是0)

6.二维列表
>>>l=[[1,2,3],[4,5,6],[7,8,9]]
>>> print (l[2][1])
8

(这里解释一下,第一个[2],实际是大地标2,[7,8,9],这个列表,第二个 [1] 值是[7,8,9]中的地标1,也就是8)

5) 列表操作 增

1 .append

增加到列表末尾,追加,只能追加一个或一个组如[1,2,3]

>>>k=[7,8,9]
>>> k.append(10)
>>>print (k)
[7, 8, 9, 10]
2 .extend

将一个可迭代对象逐个添加到末尾(只能是列表或字符串)

>>>l=[2,3,4]
>>>l.extend('888')
>>>print (l)
[2, 3, 4, ‘8’, ‘8’, ‘8’]

注意上面的8是字符串而不是数字加了引号

3 .insert(index, object)

将obj添加到指定的下标位置之前

例如,将 8 添加 1之前,1的地标是2

>>> s=[3,2,1]
>>> s.insert(2,8)
>>>print (s)
[3, 2, 8, 1]

6)列表操作之改

1.通过下标直接=修改

如下将’5‘改成8通过下标实现,5的下标是2

>>>i=[1,3,5,7]
>>>i[2]=8
>>> print (i)
[1, 3, 8, 7]
2.元素互换

如下,将地标2,3的元素就是4 4换成地标0,和1的元素就是2 2

>>> l=[2,2,4,4]
>>> l[2],l[3]=l[0],l[1]
>>> print (l) [2, 2, 2, 2]

7) 列表操作 删

1 .clear() 清空列表
>>>l=[3,3,0,6]
>>>l.clear()
>>> print(l)
[]
2 .pop(index)

删除并返回(index指定的)一位元素,默认删除最后一位,基于下标

如下删除下标为1的值,返回了4说明把4删除了

>>>k=[2,4,6,8,10]
>>> k.pop(1)
4
>>> k.pop()
10
>>> print (k)
[2, 6, 8]
(不写括号里的,默认删除最后一位,如上)
3 .remove(value)

删除指定的元素(具体的值)(基于元素而不是下标)

如下,删除数值为20的,不是基于下标,

>>> o=[5,10,20]
>>> o.remove(20)
>>> print (o)
[5, 10]
4 .del 需要删的元素

基于地标实现

>>>l=[2,3,4]
>>> del l[2]
>>>print (l)
[2, 3]

基于列表名,会删掉整个列表

>>> del (l)
>>> print (l)


(会报错,提示不存在,因为已经删了)

8)列表其他方法
1 .copy():

拷贝出一个新的列表,拷贝t,到t2

>>>t=[8,9]
>>>t2=t.copy()
>>> print (t2)
[8, 9]
2 .count(values):

返回value这个值在列表中出现的次数

>>>y1=[1,1,1,2,2,2]
>>>print (y1.count(1))
3

(如上1 在y1列表中出现了3次)

9) 列表排序

sort()方法是将list按特定顺序重新排列
默认为由小到大,参数reverse=True可以改为倒序,由大到小

>>> list1=[9,8,7,6,5,4,3,2,1]
>>>list1.sort()
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

(设置为False,为正序)

>>>list1.sort(reverse=False)
>>> print (list1)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

(如下设置为True是倒序)

>>>list1.sort(reverse=True)
>>> print (list1)
[9, 8, 7, 6, 5, 4, 3, 2, 1]

注意上面我没有直接打印,那个类似这个list1.sort(reverse=True),因为这里这是一个动作
要打印更改后的变量的值

10)应用案例

1.列表去重

list1=[1,2,2,3,3,4,4,5,5,5]
ku=[]
for i in list1:
    if i not in  ku:
        ku.append(i)
print (ku)

运行测试
[1, 2, 3, 4, 5]

2.点名系统

输入任意值返回一个名字,而且必须是随机的

import random   #必须引用这个模块,得到随机的值
name=['小明','小红','孙悟空','唐僧','沙僧','红孩儿']
while True:
    input1=input('可以输入任意的值按n键退出')
    if input1 == 'n':
        break #退出循环
    else:
        index=random.randint(0,5)
        #上面这里表示从0到5生成一个随机的值,可以根据地标来写
        #因为地标从0开始到5,所以写上面的
        print(name[index])

运行测试如下

python 字符串 不足位数 python 字符不在字符串中_字符串

实验完毕 !