python语法-----字符串和常用数据结构

本文介绍了Python中字符串的编码与解码,强调了Unicode的重要性,并展示了常见的字符串操作如查找、分割、拼接等。同时,文章还详细讲解了Python的列表、元组、字典和集合四种数据结构,包括它们的特点、操作方法和应用场景,是学习Python基础的宝贵资料。
摘要由CSDN通过智能技术生成

一、字符串

不管是哪门高级语言,字符串的处理都是我们学习的重点。对字符串的操作常用的 主要包括:查找、分割、拼接、大小写字母转换等。当然,字符串里面包含的不止字母和数字,还包括中文、特殊符号等,这就涉及到了字符串编码,事实上,字符串编码在python中见得非常多,这个和他的特性是分不开的。

1.字符串编码与与解码

编码:
首先需要理解什么是字符,比如a、b、c、1、2、3、!、#、%、你、我、他等,都是字符。

还需要知道什么是字节,这个概念和我们平时说的1byte=8bit、1Kbyte = 1024byte是一个概念,我们知道,计算机是一个只认0和1的机器,而一个1bit只有可以是0和1,那么1byte由8bit组成,那么就有256中组合的可能,从0-255都有其对应的字符,就是我们是熟悉的ascii码,显然,仅仅用这256个字符不足以显示现在的所有字符,比如中文的文字,它就没办法表示,但是1byte不能表示,那么2byte嘞?3byte嘞?显然是可以这么做的。而事实上也是这么做的。

那么现在再来说说编码:
真实字符与二进制串的对应关系,真实字符→二进制串,即真实字符—>字节,如果是一个字符串,就是真实字符串—>字节流

解码:
知道了什么是编码,那么解码就是编码的反过程,即字节流—>真实字符串。

在计算机中,内存中的数据一直是以Unicode的编码方式表示的,什么是Unicode?为什么要用这种编码方式?请参考另一篇博文,不保证准确性哦:
什么是Unicode

在python2和python3中,字符串类型都只有两种:byte和str类型
其中str存的是Unicode类型的字符、str存的是byte类型的字符。

python中编解码的转换有两个函数:
①编码:encode() 将其他编码的字符串转换成Unicode编码
②解码:decode() 将Unicode编码转换成其他编码的字符串
字符串编码后是以byte(字节)为单位进行处理的,解码后是按照字符为单位进行处理的,请看下面例子:

str1 = 'lhsmd'
print(type(str1))
str2 = str1.encode()
print(type(str2))
str3 = str2.decode()
print(type(str3))

输出如下:
在这里插入图片描述
此外,用户可以指定编解码的格式,注意,如果编码格式为‘gbk’,那么解码也必须是‘gbk’,二者要对应,否则将会报错,如下:

str1 = '这是一个测试'
print(type(str1))
str2 = str1.encode('utf-8')
print(type(str2))
str3 = str2.decode('utf-8')
print(type(str3))

输出:
在这里插入图片描述
如果你不知道是以什么格式编码或者解码的,就不要指定,直接像上面的例子即可。

2.字符串处理

字符串常见的操作可调用的函数如下:

find() 			在字符串中找想要的子串,查找成功返回出现子串的位置,失败返回-1   
split()			字符串分割,参数为分割的标志,返回分割好之后的列表   
count()			子串出现的次数,返回出现的次数   
replace()		字符串替换,返回替换后的字符串   
capitalize()	字符串首字母大写,返回首字母大写好之后的字符串
lower()			大写转小写  ,返回转换后的字符串
upper()			小写转大写,返回转换后的字符串

举例如下:

str1 = '这是一个字符串处理函数的测试,有什么问题或者错误,请批评指正,感谢!adcd,ABCD'
print(str1.find('错误'))
print(str1.split(','))
print(str1.count(','))
print(str1.replace(',', '。'))
print(str1.capitalize())
print(str1.lower())
print(str1.upper())

输出:
在这里插入图片描述

二、常用数据结构

1.列表

(1)简介
①列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开;

②一个列表中的数据类型可以各不相同
s = [1,2,3,'1','a',"strd",6,'ys']
	print(s[4])  # a
	print(s[5])  # strd

	for i in s:
		print(i,end=" ")   # 遍历输出
	print("")
	n = 0
	while n < len(s):
		print(s[n],end=" ")  
		n+=1
(2)列表的相关操作:
①添加元素
	append    在列表末尾插入
	extend    分裂式末尾插入
	insert    在指定位置插入
②修改元素
	通过下标修改
③查找元素
	in    
	not in   
	index   
	count
④排序
	sort    
	reverse
⑤删除元素:
	del
	pop
	remove
	
(3)列表推导式:
	[表达式 for 变量 in 列表]    
	[表达式 for 变量 in 列表 if 条件]
	例如:li2 = [a for a in range(11)] 

(4)列表嵌套:
	即列表里面又有列表
	li = [1, 2, 3, [4, 5, 6]]  # [4, 5, 6]是里面的列表
	print(li[3])  # 取出里面的列表
	print(li[3][1])   # 取出内列表中的元素5

2.元组

(1)元组格式:
	tua = (1, 2, 3)
python中不允许修改元组的数据,包括不能删除其中的元素。
写元组的时候,只有一个元素末尾一定要加,

(2)元组操作:
	index    从元组中找出某个对象第一个匹配项的索引位置,如果不在元组中会报一个异常
	count    统计某个元素在元组中出现的次数
	
	t = (1,3,"44","LHSMD",5,6)
	print(t)            # 输出这个元组
	print(t[4])         # 输出这个元素的第5个元素  注意是从0开始
	print(t.index(5))   # 输出第一次出现5的位置
	print(t.count(2))   # 输出元组中2 出现的次数

3.字典

(1)字典格式:
	dic = {'name': 'zs', 'age': 18}
			键      值
字典中的键具备唯一性, 值可以重复

根据键名访问值
	dic2 = {'name': '酸橘子', 'name2': '别'}
	print(dic2['name'])
	print(dic2.get('name3'))  # 键名不存在,返回None
	
(2)字典常见操作:
	①查看元素
		变量名[键名]、变量名.get(键名)
	②修改元素:
		通过key找到,即可修改
	③添加元素
		变量名['键'] = 数据  不存在则新增
	④删除元素
		del删除指定的元素
		clear清空整个字典
其他操作:
	len   	键值对的个数 
	keys  	返回包含字典所有key的列表
	value  	包含字典所有value的列表
	items	包含所有(键、值)的列表
dic = {"name":"LHSMD","age":"18"}
print(dic.get("name"))  # 得到 name 的键值
print(dic.keys())       # 返回包含字典所有key的列表
print(dic.items())      # dict_items([('name', 'LHSMD'), ('age', '18')])
dic['love'] = "what"
print(dic)      # {'name': 'LHSMD', 'age': '18', 'love': 'what'}
del dic['love']
print(dic)      # {'name': 'LHSMD', 'age': '18'}
dic.clear()
print(dic)      # {}

4.集合

(1)简介
①集合是无序的,里面的元素是唯一的

②可以用于元组或者列表去重

(2)集合相关操作:
①添加元素:
	add
	update
②删除元素:
	remove
	pop
	discard
③交集 &
④并集 |

三、总结

需要记住编解码方法,熟悉字符串处理方法;
记住下面这边常用数据结构,注意区分他们:
列表-------a[1,2,3,"111","567",2,"lhsmd"]
元组-------a(1,2,3,"jjj",5,"444")   		元素不可改变	
字典-------a{"name":"LHSMD","age":"23"}		键值对
集合-------a{1,2,3,"LLL",8,"LHSMD"}			无序性
根据他们的特点,注意增删改查的操作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

all of the time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值