六.字符串操作,列表类型操作

一.字符串操作

1.用途:记录描述性质的状态

2.定义方式:

在单引号,双引号,三引号内包含的一串字符

msg = "[1,2,3]"  # msd = str("[1,2,3]")

数据类型转换:str可以把任意类型转换成字符串类型

str([])

3.常用操作+内置的方法

优先掌握的操作:

①按索引取值(正向取+反向取) :只能取
msg = 'hello你好'
print(msg[0]) # 取出的由单一字符组成的str
print(msg[5])  # 你
print(msg[-1])  # 好

# msg = "hello"
# msg[0] = "H" # 不支持根据索引修改的操作
②切片(顾头不顾尾,步长)
msg = 'hello你好'
print(msg[1:6])  # ello你
print(msg)  # 字符串不会变

print(msg[1:6:1])  # 默认步长,1 2 3 4 5
print(msg[1:6:2])  # 默认步长,1 3 5

print(msg[:6:2]) #省略起始位置,默认起始位置为o  =>hlo
print(msg[::2]) #省略起始结束位置,默认一直到末尾全部都取到  =>hlo好
print(msg[::])  # 省略步长,默认步长为1 =>hello你好
print(msg[:]) # 省略步长,默认步长为1   =>hello你好

了解:

msg = 'hello你好'
print(msg[0:5:1])  # hello
print(msg[0:5:-1])  # 取不到
# 方向需要保持一致才行
print(msg[-1:-5:-1]) # -1 -2 -3 -4
#                      好  你  o  l
msg = 'hello你好'
print(msg[::-1])  # 好你olleh
③长度len
msg = 'hello \n你好'
print(len(msg)) #统计的是字符个数,空格,换行符也算字符
④成员运算in和not in
msg = 'hello 你好'
print("你好" in msg)
print("你好" not in msg) #推荐使用
print(not "你好" in msg) # 不推荐
⑤移除空白strip
msg = "       hello    "
res = msg.strip()
print(res)

msg = "   \t  \n hello  \t"
res = msg.strip()  # 默认去掉的是字符串左右两端的空白字符串
print(res)

msg = "   \t  \n he   llo  \t"
res = msg.strip()  # 默认去掉的是字符串左右两端的空白字符串
print(res) # he   llo

msg = "*()-=hello()*&#@!"
res = msg.strip("()*=-!&#@")
print(res) # 得到的是新字符串,没有改变原来的 => hello
print(msg) # *()-=hello()*&#@!

user = input('用户名>>>:').strip()
password = input('密码>>>: ').strip()
if user == "egon" and password == "123":
	print('账号密码正确')
else:
	print("账号或密码输入错误")

⑥split:将字符串切分成列表

split:从左往右切分
rsplit:从右往左切分

print("egon:18:male:10".split(":",2)) # ['egon', '18', 'male:10']
print("egon:18:male:10".split(":",1)) # ['egon', '18:male:10']
print("egon:18:male:10".rsplit(":",1)) # ['egon:18:male', '10']

msg = "a:b:c:d"
res = msg.split(':')
print(res)  #['a', 'b', 'c', 'd']

msg = "hello 你 好"
print(msg.split(' ')) #['hello', '你', '好']

# 把列表拼成一个str,列表中的元素必须全部为str类型
msg = ['a', 'b', 'c', 'd']
print(":".join(msg)) # "a:b:c:d"
print("-".join(msg)) # "a-b-c-d"
print("=".join(msg)) # "a=b=c=d"
⑦循环
for x in "hello 你好":
	print(x)

需要掌握的操作:

①strip,lstrip,rstrip

strip:移除左右两边的指定字符
lstrip:只移除左边的指定字符
rstrip:只移除右边的指定字符

msg = "*****hello*****"
print(msg.strip('*')) #hello
print(msg.lstrip("*")) #hello*****
print(msg.rstrip("*")) #*****hello
②lower,upper

lower:将英文字符串全部变小写
upper:将英文字符串全部变大写

msg = "aABc你1"
print(msg.lower()) # aabc你1
print(msg.upper()) # AABC你1
③startswith,endswith

startswith:判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
endswith:判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False

msg = "dsb lxx is sb"
print(msg.startswith("ds")) #True
print(msg.endswith("sb"))   #True

④format 的三种玩法

format括号内在传参数时完全可以打乱顺序,但仍然能指名道姓地为指定的参数传值,其实就是format()后面的内容,填入花括号中(可以按位置,或者按变量,或者按索引)

print("my name is {} {}".format("egon",18))
print("my name is {x} {y}".format(y=18,x="egon"))
print("my {1}name is {0} {0}{1}{1}".format("egon",18))

# 也可以用f传值(python2不支持此种方式,更推荐用format)
x = 'egon'
y = 18
print(f"=====>{x}===>{y}")
⑤join:把列表拼接成字符串

按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串

# 把列表拼成一个str,列表中的元素必须全部为str类型
msg = ['a', 'b', 'c', 'd']
print(":".join(msg)) # "a:b:c:d"
print("-".join(msg)) # "a-b-c-d"
print("=".join(msg)) # "a=b=c=d"
⑥replace:替换
msg = "*()-=he    llo()*&#@!"
res = msg.strip("()*=-!&#@").replace(' ','')
print(res)  # hello
⑦isdigit:判断字符串是否由纯数字组成
age = "18**** "
print(age.isdigit()) # False

age = input('>>>: ') 
if age.isdigit():
	if age > 18:
		print('猜大了')
	elif age < 18:
		print('猜小了')
	else:
		print('猜对了')
else:
	print("必须输入数字,小垃圾")

了解操作

①find,rfind,index,rindex,count

find查找一个子字符串在大字符串中出现的起始位置

print("=abcdefab".find("ab"))

find查找一个子字符串在大字符串中出现的起始位置

print("=adcabdefab".find("ab",0,6))

rfind查找一个子字符串在大字符串中出现的起始位置

print("=adcabdefab".rfind("ab"))

index找不到则报错,而find则会返回-1

print("====".index("ab"))
②center,ljust,rjust,zfill

center:字符串居中显示
ljust:在字符串左边添加内容
rjust:在字符串右边添加内容
zfill:宽度为n,字符串右对齐显示,不够用0填充

print("egon".center(50,'*'))
print("egon".ljust(50,'*'))
print("egon".rjust(50,'*'))
print("egon".zfill(50))
③expandtabs

修改制表符代表的空格数

>>> name = 'tony\thello'  # \t表示制表符(tab键)
>>> name
tony    hello
>>> name.expandtabs(1)  # 修改\t制表符代表的空格数
tony hello
④captalize,swapcase,title

captalize:字符串的首个字母大写,其余小写
swapcase:大小写互换
title:每个单词的首字母大写,其余小写

print("my name is egon".capitalize())
print("AbCd".swapcase())
print("my name is egon".title())
⑤is数字系列
#在python3中
# num1=b'4' #bytes
# num2=u'4' #unicode,python3中无需加u就是unicode
# num3='四' #中文数字
# num4='Ⅳ' #罗马数字

.isdigit():判断是否全部都是纯数字类型
# isdigit():用于b和u格式,即num1和num2
# isdecimal():用于u格式,即num2
# isnumberic():用于u,中文数字、罗马数字,即num2、num3、num4


#isdigt:bytes,unicode
# print(num1.isdigit()) #True
# print(num2.isdigit()) #True
# print(num3.isdigit()) #False
# print(num4.isdigit()) #False

#isdecimal:uncicode
#bytes类型无isdecimal方法
# print(num2.isdecimal()) #True
# print(num3.isdecimal()) #False
# print(num4.isdecimal()) #False

#isnumberic:unicode,中文数字,罗马数字
#bytes类型无isnumberic方法
# print(num2.isnumeric()) #True
# print(num3.isnumeric()) #True
# print(num4.isnumeric()) #True

#三者不能判断浮点数
# num5='4.3'
# print(num5.isdigit())
# print(num5.isdecimal())
# print(num5.isnumeric())
⑥is 其他
# name='egon123'
# print(name.isalnum()) #字符串由字母或数字组成
# print(name.isalpha()) #字符串只由字母组成

.isidentifier():判断是否可以定义为变量名

# name="====>inputasd" # "input" in name
# print(name.isidentifier())

.islower():判断是否全部都是小写字母
.isupper():判断是否全部都是大写字母

# name="egon"
# print(name.islower())
# print(name.isupper())

.isspace():判断是否全部由空格构成

# name="       "
# print(name.isspace())

.istitle():判断是否是单词首个字母大写

# name="My Name Is"
# print(name.istitle())

4.总结:

str类型只能存一个值,有序,不可变

二.列表类型操作

1.用途:按照位置存多个值

2.定义方式:

在[]内用逗号分隔开多个任意类型的值

l = [111,3.1,"abc",[]] # l = list(...)
print(type(l))

类型转换
list(传入的可以是任意能够被for循环遍历的类型)

print(list("hello"))
print(list(["a",'b']))
print(list({"k1":11,"k2":222}))

3.常用操作+内置方法

优先掌握的操作:

①按索引改,取值(正向存取+反向存取):即可改也可以取
l = [111,222,333,444,555]
l[0] = 123
print(l)

l[5] = 666 # 超出索引范围则报错,即不能用这种赋值操作为列表增加值
②切片(顾头不顾尾,步长)
l = [111,222,333,444,555]
res = l[0:3]
print(res)  #[111, 222, 333]
print(l)  #[111, 222, 333, 444, 555]

③长度
l = [111,222,333,444,555]
print(len(l))

④成员运算in和not in
l = [111,222,333,444,555]
print(111 in l)
print(111 not in l)
⑤增加:append,insert,extend

append:在末尾追加

l = [111,222,333,444,555]
l.append(666)
l.append(777)
print(l)

insert:往指定索引前插入元素

l=[111,222,333,444,555]
l.insert(0,123)
print(l)

extend:迭代追加所有元素

l=[11,22,33]
l.extend([444,555,66])
print(l)
⑥删除del,remove,pop,clear

del: 是通用的,不是列表专属的删除方式

l = [111,"aaa",222,333,444,555]
del l[0]
print(l)

remove:指定元素删除

l=[111,"aaa",222,333,444,555]
res = l.remove("aaa")
print(l)
print(res)

pop:指定索引删除

l=[111,"aaa",222,333,444,555]
l.pop() # 默认删除的是索引-1对应的值
print(l)

res = l.pop(1)
print(l)
print(res)

clear:清空列表

l = [10, -1, 3, 2, 11, 7]
l.clear()
print(l)
⑦循环
l=[111,"aaa",222,333,444,555]
for i in l:
	print(i)

需要掌握的内容

count:统计某个元素出现的次数

l = [111,222,111,111]
print(l.count(111))

sort:列表排序(默认从小到大排序)

l = [10, -1, 3, 2, 11, 7]
l.sort(reverse=True)
print(l)

reverse:列表反转操作

l=['a',1,'b']
l.reverse()
print(l)

index :获取某个值在列表中的索引

lst = ["111","222","333","444","555"]
res = lst.index("333")

浅copy

l1=[11,22,33]
# l1列表内存存储
# 索引0 值11的内存地址
# 索引1 值22内存地址
# 索引2 值33内存地址

l2=l1.copy() # 等同于l4=l1[:]
# l2列表内存存储
# 索引0 值11的内存地址
# 索引1 值22内存地址
# 索引2 值33内存地址
l2[0]=4444
print(l2) # [4444, 22, 33]
print(l1) # [11, 22, 33]

l3=l1
l3[0]=4444
print(l3)
print(l1)

4.总结:

存多个值,有序,可变

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值