当前位置: 首页 > article >正文

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}


http://www.kler.cn/news/148000.html

相关文章:

  • 门店管理系统小程序作用是什么
  • 【git】工作中常用的命令
  • linux复习笔记05(小滴课堂)
  • FPGA模块——AD高速转换模块(并行输出转换的数据)
  • SpringBootWeb案例_01
  • RBAC(Role-Based Access Control,基于角色的访问控制)
  • 0040__浅析websocket和http的区别
  • 【解决方案】基于边缘计算技术的安科瑞综合管廊能效管理平台
  • 数据结构-01-数组
  • Node——Node.js简介
  • Python编程进阶:掌握描述符与装饰器的神奇妙用
  • 通过 python 脚本迁移 Redis 数据
  • python 输出日志到文件,删除过期文件
  • Linux 中的 ls 命令使用教程
  • pytdx 分笔 数据
  • 让KVM支持滚动热升级:Multi-KVM
  • 【Qt】之QSet使用
  • 小程序----使用图表显示数据--canvas
  • VMware虚拟机网络配置详解
  • echarts 几千条分钟级别在小时级别图标上展示
  • 【开源】基于Vue和SpringBoot的农家乐订餐系统
  • Python基础:标准库概览
  • 汇编语言指令大全30条
  • 二百零八、Hive——HiveSQL异常:Select查询数据正常,但SQL语句加上group by查询数据为空
  • redis的高可用(主从复制和哨兵模式)
  • 【go入门】表单
  • 基于OpenCV+YOLOv5实现车辆跟踪与计数(附源码)
  • MySOL常见四种连接查询
  • NX二次开发UF_CURVE_ask_spline_feature 函数介绍
  • 从范式标准谈一下OLTP和OLAP的区别