Python常见基础数据结构
Python常见基础数据结构
- 字符串
- 字符串的构造
- 字符串是一种序列
- 正向索引
- 负向索引
- 有限切片
- 无限切片
- 查询方法
- 压缩方法
- 替换方法
- 格式化插入
- 分割方法
- 列表
- 列表构造
- 列表同样属于序列
- 列表的元素增加
- 列表其他方法
- 元组
- 字典
- 字典的构造
- 字典不属于序列
- 字典可变
字符串
字符串的构造
• 单引号:字符串中含有双引号时;
• 双引号:字符串中含有单引号时;
• 三引号:字符串中既含有单引号又含有双引号时,或需要多
行显示时;
# 单引号构造字符串
string1 = '"commentTime":"2018-01-26 08:59:30","content":"包装良心!馅料新鲜!还会回购"'
# 双引号构造字符串
string2 = "ymd:'2017-01-01',bWendu:'5℃',yWendu:'-3℃',tianqi:'霾~晴',fengxiang:'南风'"
# 三引号构造字符串
string3 = ''''nickName':"美美",'content':"环境不错,服务态度超好,就是有点小贵"'''
string4 = '''据了解,持续降雪造成安徽部分地区农房倒损、种植养殖业大棚损毁,
其中合肥、马鞍山、铜陵3市倒塌农房8间、紧急转移安置8人。'''
print(string1)
print(string2)
print(string3)
print(string4)
输出:
“commentTime”:“2018-01-26 08:59:30”,“content”:“包装良心!馅料新鲜!还会回购”
ymd:‘2017-01-01’,bWendu:‘5℃’,yWendu:‘-3℃’,tianqi:‘霾~晴’,fengxiang:‘南风’
‘nickName’:“美美”,‘content’:“环境不错,服务态度超好,就是有点小贵”
据了解,持续降雪造成安徽部分地区农房倒损、种植养殖业大棚损毁,
其中合肥、马鞍山、铜陵3市倒塌农房8间、紧急转移安置8人。
字符串是一种序列
正向索引
1、正向单索引指的是只获取列表中的某一个元素,并且是从左到右的方向索取对应位置下的元素,可以使用[index]表示。
2、需要注意的是,索引值index是从0开始的,所以索引值与实际元素的位置正好差1。
price = '5元/瓶'
# 取出价格,并做整型转换
print(int(price[0]))
# 取出字符串中的“元”
print(price[1])
# 取出字符串中的“瓶”
print(price[3])
print(price[len(price) -1]) # len()取字符串的长度
输出:
5
元
瓶
瓶
负向索引
1、负向单索引是指在正向单索引的基础上添加一个负号“-”,所表达的含义是从右向左的方向,获取元素,可以用[-index]表示。
2、需要注意的是,负索引index是从-1开始的。
price = '5元/瓶'
# 取出字符串中的“瓶”
print(price[-1])
ID = '123456198908187890'
# 根据身份证号码识别性别
if int(ID[-2]) % 2 == 0: #%计算两个数商的余数
print('女')
else:
print('男')
输出:
瓶
男
有限切片
切片索引指的是按照固定的步长,连续取出多个元素,可以[start: end :step]表示。其中,start指定索引的起始位置;end指定索引的终止位置(注意,end位置的元素不取!);step指步长,默认为1,表示逐个取出子元素。
price2 = '24.5元/500g'
# 取出价格,并转换为浮点型
print(float(price2[0:4]))
# 取出字符串中的“500g”
print(price2[6:len(price2)])
ID = '123456198908187890'
# 取出出生日期
print(ID[6:14])
输出:
24.5
500g
19890818
无限切片
是指在切片过程中不限定起始元素的位置或终止元素的位置,甚至起始和终止元素的位置都不限定,可以用[::step]表示。第一个冒号是指从字符串的第一个元素开始获取;第二个冒号是指取到最后一个元素结束(包含最后一个元素值)。
price2 = '24.5元/500g'
# 取出价格,并转换为浮点型
print(float(price2[:4]))
# 取出字符串中的“500g”
print(price2[6:])
print(price2[-4:])
输出:
24.5
500g
500g
查询方法
str.index(sub[, start[, end]])
或str.find(sub[, start[, end]])
sub:指定查询的目标子串;
start:指定查询的起始位置;
end:指定查询的结束位置;
price2 = '24.5元/500g'
price3 = '89.9元/桶'
# 查询“元”所在的位置
print(price3.index('元'))
# 取出价格,并转换为浮点型
print(float(price2[:price3.index('元')])) # 取到元的位置停止
输出:
4
24.5
压缩方法
str.lstrip([chars]) 删除左侧
str.rstrip([chars]) 删除右侧
str.strip([chars]) 删除首尾两边
chars :指定待压缩的首尾字符;
#chars默认为空白
prodName = '乒乓球拍(红双喜) '
# 压缩右侧的空白字符
print(prodName.rstrip())
price3 = '单价:18.9 元/Kg'
# 取出价格并转换为浮点数
print(float(price3[3:price3.index('元')].strip()))
sentence = '&&&^_^很喜欢,给满分!(^-^)'
# 剔除评论中首尾的特殊字符
print(sentence.strip('&^_^(^-^)')) # 找到其中的目标,他就删除
输出:
乒乓球拍(红双喜)
18.9
很喜欢,给满分!
替换方法
若字符串中间有需要替换的(不是两边),就需要用替换方法
str.replace(old, new)
old:指定被替换的子串;
new:指定新的子串;
sentence = '别克英朗1.3t的排量家用足够了,1.3T对应的可是163马力!'
# 将小写的t替换为大写的T -- 按值替换
print(sentence.replace('t', 'T'))
tel = '13612347890'
# 隐藏手机号中间四位
print(tel.replace(tel[3:7],'****'))
输出:
别克英朗1.3T的排量家用足够了,1.3T对应的可是163马力!
136****7890
格式化插入
str.format (values)
values:指定格式化的值;
info = '尊敬的刘先生,您的话费余额为6.78元,请及时充值,以免影响通话!'
# 转换为格式化风格
print('尊敬的{}{},您的话费余额为{}元,请及时充值,以免影响通话!'.format('刘','先生',6.78))
# 保留两位有效数字的格式化
print('ROC曲线下的AUC值为:{:.2f}'.format(0.8356444))
# 生成5个有规则的网页链接
for month in [1,2,3,4,5]:
print('http://tianqi.2345.com/t/wea_history/js/20230{0}/60008_20230{0}.js'.format(month))
输出:
尊敬的刘先生,您的话费余额为6.78元,请及时充值,以免影响通话!
ROC曲线下的AUC值为:0.84
http://tianqi.2345.com/t/wea_history/js/202301/60008_202301.js
http://tianqi.2345.com/t/wea_history/js/202302/60008_202302.js
http://tianqi.2345.com/t/wea_history/js/202303/60008_202303.js
http://tianqi.2345.com/t/wea_history/js/202304/60008_202304.js
http://tianqi.2345.com/t/wea_history/js/202305/60008_202305.js
分割方法
str.split(sep)
sep :指定待分割的分割符;
email = 'lsx1234567@163.com'
# 将邮箱分割为邮箱名称和域名
print(email.split('@'))
info = '博佳花园 | 2室2厅 | 94.44平米 | 南 北 | 精装'
# 取出二手房中的面积值,并转换为浮点型
size = info.split('|')[2]
print(float(size.strip()[:-2]))
输出:
[‘lsx1234567’, ‘163.com’]
94.44
列表
列表构造
• 列表是一种存储数据的容器,借助于一对方括号构造列表对象。
• 构成列表的元素没有任何限制,可以是任何类型的数据,也可以是任何结构的数据。
ll = [1,3.14,False,'HUAWEI','2019-05-03',[1,3,5,7]]
list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]
list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']
list3 = [1,10,100,1000,10000]
print(ll)
print(list1)
print(list2)
print(list3)
输出:
[1, 3.14, False, ‘HUAWEI’, ‘2019-05-03’, [1, 3, 5, 7]]
[‘张三’, ‘男’, 33, ‘江苏’, ‘硕士’, ‘已婚’, [‘身高178’, ‘体重72’]]
[‘江苏’, ‘安徽’, ‘浙江’, ‘上海’, ‘山东’, ‘山西’, ‘湖南’, ‘湖北’]
[1, 10, 100, 1000, 10000]
列表同样属于序列
所以对于字符串的操作方法同样适用。
list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]
# 取出第一个元素
print(list1[0])
# 取出第四个元素
print(list1[3])
# 取出最后一个元素
print(list1[-1])
# 取出“身高178”这个值
print(list1[-1][0])
list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']
# 取出“浙江”至“山西”四个元素
print(list2[2:6])
# 取出最后三个元素
print(list2[-3:])
输出:
张三
江苏
[‘身高178’, ‘体重72’]
身高178
[‘浙江’, ‘上海’, ‘山东’, ‘山西’]
[‘山西’, ‘湖南’, ‘湖北’]
列表的元素增加
借助于列表的append和extend方法可以实现列表元素的增加,所不同的是append在列表尾部增加一个元素,而extend可以增加多个元素。
list3 = [1,10,100,1000,10000]
# 在列表末尾添加数字2
list3.append(2)
print(list3)
# 在列表末尾添加20,200,2000,20000四个值
list3.extend([20,200,2000,20000])
print(list3)
输出:
[1, 10, 100, 1000, 10000, 2]
[1, 10, 100, 1000, 10000, 2, 20, 200, 2000, 20000]
列表其他方法
list.count #计算列表元素的频数
list.index #查找列表对应元素的对应位置(仅首次出现的位置)
list.sort #对列表进行排序(需要数据类型相同)
元组
• 元组与列表基本相同,都是属于存储数据的容器,使用一对圆括号可以构造元组对象。
• 元组同样属于序列。
• 元组是不可变对象。
• 构造只包含一个元素的元组,需在元组后面加逗号。
tt = (1,3.14,False,'HUAWEI','2019-05-03',[1,3,5,7],(10,20,100))
t1 = ('张三','男',33,'江苏','硕士','已婚',['身高178','体重72'])
t2 = ('江苏','安徽','浙江','上海','山东','山西','湖南','湖北')
t3 = (1,)
print(tt)
print(t1)
print(t2)
print(t3)
输出:
(1, 3.14, False, ‘HUAWEI’, ‘2019-05-03’, [1, 3, 5, 7], (10, 20, 100))
(‘张三’, ‘男’, 33, ‘江苏’, ‘硕士’, ‘已婚’, [‘身高178’, ‘体重72’])
(‘江苏’, ‘安徽’, ‘浙江’, ‘上海’, ‘山东’, ‘山西’, ‘湖南’, ‘湖北’)
(1,)
字典
字典的构造
• 构造字典对象需要使用大括号表示,即{};
• 字典元素都是以键值对的形式存在,并且键值对之间用英文状态下的冒号隔开,即key:value
• 键在字典中是唯一的,不能有重复。
dict1 = {'姓名':'张三','年龄':33,'性别':'男','子女':{'儿子':'张四','女儿':'张美'},
'兴趣':['踢球','游泳','唱歌']}
dict2 = {'电影':['三傻大闹宝莱坞','大话西游之大圣娶亲','疯狂动物城'],
'导演':['拉吉库马尔·希拉尼','刘镇伟','拜伦·霍华德 '],'评分':[9.1,9.2,9.2]}
print(dict1)
print(dict2)
输出:
{‘姓名’: ‘张三’, ‘年龄’: 33, ‘性别’: ‘男’, ‘子女’: {‘儿子’: ‘张四’, ‘女儿’: ‘张美’}, ‘兴趣’: [‘踢球’, ‘游泳’, ‘唱歌’]}
{‘电影’: [‘三傻大闹宝莱坞’, ‘大话西游之大圣娶亲’, ‘疯狂动物城’], ‘导演’: [‘拉吉库马尔·希拉尼’, ‘刘镇伟’, '拜伦·霍华德 '], ‘评分’: [9.1, 9.2, 9.2]}
字典不属于序列
由于字典不再是序列,就无法借助于列表或元组中的索引方法返回字典中的元素。如需返回字典的元素,可以使用键索引或者get方法。
dict1 = {'姓名':'张三','年龄':33,'性别':'男','子女':{'儿子':'张四','女儿':'张美'},
'兴趣':['踢球','游泳','唱歌']}
# 取出年龄
print(dict1['年龄'])
# 取出子女中的儿子姓名
print(dict1['子女']['儿子'])
# 取出兴趣中的游泳
print(dict1['兴趣'][1])
输出:
33
张四
游泳
字典可变
d[key] = value
d[key] = value
当key的值在字典当中,此操作为修改
当key的值不在字典当中,此操作为增加
dict1 = {'姓名':'张三','年龄':33,'性别':'男','子女':{'儿子':'张四','女儿':'张美'},
'兴趣':['踢球','游泳','唱歌']}
# 增加身高信息
dict1['身高'] = 178
print(dict1)
# 将年龄改为35
dict1['年龄'] = 35
print(dict1)
输出:
{‘姓名’: ‘张三’, ‘年龄’: 33, ‘性别’: ‘男’, ‘子女’: {‘儿子’: ‘张四’, ‘女儿’: ‘张美’}, ‘兴趣’: [‘踢球’, ‘游泳’, ‘唱歌’], ‘身高’: 178}
{‘姓名’: ‘张三’, ‘年龄’: 35, ‘性别’: ‘男’, ‘子女’: {‘儿子’: ‘张四’, ‘女儿’: ‘张美’}, ‘兴趣’: [‘踢球’, ‘游泳’, ‘唱歌’], ‘身高’: 178}