python数据类型之字符串(二)
基础详见上篇文章:https://www.cnblogs.com/gaofeng-01/p/16787492.html
字符串相关题目
1、字符串反转
str1 = 'abc'
# 方式一:通过切片反转
print(str1[-1::-1])
# 方式二:先将字符串转换为列表,最后将列表转为字符串
lst1 = list(str1)
lst1.reverse()
print(''.join(lst1))
# 方式三:直接将字符串反转为一个迭代器对象,最后使用join将其连接为字符串
ite = reversed(str1)
print(''.join(ite))
# 此处扩展一个小知识点:reverse只能操作列表;reversed不仅限于列表,它返回的是迭代器对象
2、去除字符串空格
str1 = ' ab c '
# 方式一:使用replace替换
print(str1.replace(' ', ''))
# 方式二:使用strip()剔除首位空格;缺陷,无法剔除中间的空格
print(str1.strip())
# 方式三:使用split切割成列表+join连接
print(''.join(str1.split(' ')))
3、输入字符串,打印奇数位上的字符
str1 = 'abcdefg'
print(str1[1::2]) # 思路:使用切片中的步长,每隔2个走一步,取出的就都是奇数
4、字符串转换为列表
import ast
str1 = 'abc bdf'
# 方式一:使用list()内置方法转换
print(list(str1))
# 方式二:使用字符串切割函数split
print(str1.split())
# 方式三:列表推导式
print([str_seq for str_seq in str1])
# 方式四:literal_eval强转,literal_eval强转会自动识别双引号中的数据类型
str2 = "['abc']"
print(ast.literal_eval(str2))
5、字符串和字典转换
import json
import ast
import json.decoder
# ①json字符串转字典:用json.loads()
# ②字典字符串转字典:用ast.literal_eval()
# ③既是json字符串又是字典字符串转字典:json.loads()和ast.literal_eval()都可使用
# 字典字符串。字典:不认null、true、false
str0 = "{'a': None, 'b': True, 'c': False}"
str1 = "{'a': '1', 'b': 1}"
# json字符串。json:不认单引号、None、False、True
str2 = '{"a": null, "b": false, "c": true}'
str3 = '{"a": {"a1": null}, "b": [null, 1]}'
# json字符串,字典字符串
str4 = '{"a": 1, "b": "2"}'
# 如果用json.loads()编码字典字符串会报错
try:
res1 = json.loads(str0)
res1_1 = json.loads(str1)
except json.decoder.JSONDecodeError as e:
print('错误:str0和str1不是json字符串,使用json.loads()报错')
print('正确:字典字符串转字典{}\n字典字符串转字典{}'.format(ast.literal_eval(str0), ast.literal_eval(str1)))
# 如果用ast.literal_eval()编码json字符串会报错
try:
res2 = ast.literal_eval(str2)
res2_1 = ast.literal_eval(str3)
except ValueError as e:
print('错误:str2和str3不是字典字符串,使用ast.literal_eval()报错')
print('正确:json字符串转字典{}\njson字符串转字典{}'.format(json.loads(str2), json.loads(str3)))
# ④字典转json字符串:用json.dumps()
dict1 = {'a': None, 'b': True, 'c': False}
print('字典转json字符串{}'.format(json.dumps(dict1, ensure_ascii=False)))
5.1、字符串和字典转换扩展讲解-json.loads()和ast.literal_eval()
import json
import ast
# ########################################################json.loads()#########################################
# ########################################################json.loads()#########################################
"""json.loads()是将json字符串格式的数据转换为python中的对象字典数据格式!
如果不是json格式的数据传给json.loads()则会报错。记住json.loads()只认json格式的字符串!"""
# str0单引号里面的数据格式属于json格式,str0是json格式的字符串。所以json.loads()能将其转换为字典
str0 = '{"a": null, "b": false, "c": true}'
# str0单引号里面的数据格式不属于json格式,str0不是json格式的字符串,是字典格式的字符串。所以json.loads()无法将其转换为字典
# 此时可以考虑直接使用ast.literal_eval(),或者使用json.dumps(ast.literal_eval())将其转换为json格式的字符串
str1 = '{"a": None, "b": False, "c": True}'
# #######################################################json.dumps()##########################################
# #######################################################json.dumps()##########################################
"""json.dumps()是将python中对象转换为json字符串,如果对象是字典,则json.dumps()可将其转换为json格式的字符串!
如果对象不是字典,则返回的结果将不是json数据格式的字符串,只是单纯的无规则的字符串"""
str2 = {"a": None, "b": False, "c": True}
str3 = '{"a": null, "b": false, "c": true}'
print(json.dumps(str2)) # 对象是字典,所以能将str2转换成json格式的字符串
print(json.dumps(str3)) # 对象不是字典,所以str3的转换结果是无规则的字符串
# #######################################################ast.literal_eval()####################################
# #######################################################ast.literal_eval()####################################
"""ast.literal_eval()是将表达式右边的实例转化为python中可识别的数据格式,如字典,元组,列表等等
如果转换后的数据格式python识别不了,则会报错。"""
str5 = '{"a": null, "b": false, "c": true}' # 去掉引号后的数据格式不是字典,在python中是不认可的。所以ast.literal_eval()报错
str6 = '{"a": None, "b": False, "c": True}' # 去掉引号后的数据格式是字典,在python可识别。所以ast.literal_eval()可将其转换为字典
# json.dump() 将python中的对象转化成json储存到文件中
# json.load() 将文件中的json的格式转化成python对象提取

浙公网安备 33010602011771号