组合数据类型——元组列表集合映射,含词频统计做法
admin
2024-02-13 14:52:19
0

python 组合数据类型

序列类型: 字符串str,元组tuple 列表list
正向序号:01234;反向:-1(倒数第一个) -2…
操作符:
s*n:序列s复制n次
s.index(x[,i[,j]]): 序列s中从i位置到j位置中间第一次出现x的位置
s.count(x) : 序列中出现x的总次数

元组类型

元组一旦创建就不能被修改。一般用于表达固定数据项、函数返回值、多变量同时赋值、循环遍历等情况。
创建:

tuple([1,2,3])
tuple('python')
st = 'num','name','job'
course = ('math','english','sport')
info = ('name','num','job',course)

列表类型

与元组不同,列表的长度和内容都是可变的,可自由对列表中的数据项进行增加、删除或替换。列表没有长度限制,元素的类型可以各不相同。

  1. 创建
list('python')
# ['p','y','t','h','o','n']
tp = (1,2,3)
list(tp)
# [1,2,3]
ls = [11,'aa',['red','green']]
# ls[2][0]  --->'red' 
  1. 列表操作
    简单将一个列表赋值给另一个列表是不会生成新的列表对象的,而是将两个变量指向了同一个列表。只有通过list()或
    [ ]创建才会生成新列表.
# 简单赋值的后果,改1变2
ls = [11,'22',['red','green']]
lt  = ls
ls[1] = 'ppp'
# 打印lt 得到:[11,'ppp',['red','green']]

如果非要将一个列表的值赋给另一个变量,可通过复制的方式实现:

ls = [11,'22',['red','green']]
# 生成新列表,复制ls中所有元素
lt = ls.copy()
ls[1] = 'ppp'
# # 打印lt 得到:[11,'22',['red','green']]

操作符:
ls.extend(lt) 或者 ls+=lt :将lt元素加到列表ls中
ls+=n:更新列表ls,元素重复n次
ls.pop(i):列表ls中第i个元素取出并删除,返回剩下的列表ls
ls.remove(x) :删列表的元素,返回剩下的ls (注意pop,remove传的参数不一样!)

增删改查操作

lt = ['cat', 'dog', 'tiger', 111]
lt[1:2] = [1, 2, 3, 4]
print('此时lt:', lt)
# "初始:结束:步长" 删除部分包括初始和结束
del lt[::3]
print('删除后此时lt:', lt)
#  更新需要=;如果只是lt*2打印内容并未更新lt
lt *= 2
print('乘2后此时lt:', lt)
lt += ['a', 'b', 'c', 'd', 'e']
print('增加后此时lt:', lt)

打印结果:

此时lt: ['cat', 1, 2, 3, 4, 'tiger', 111]
删除后此时lt: [1, 2, 4, 'tiger']
乘2后此时lt: [1, 2, 4, 'tiger', 1, 2, 4, 'tiger']
增加后此时lt: [1, 2, 4, 'tiger', 1, 2, 4, 'tiger', 'a', 'b', 'c', 'd', 'e']

对元素操作:

ls = [1, 2, 3, 4, 5, 6, 7]
ls.append(10)
print('+10以后此时ls:', ls)
# 在1位置插入30
ls.insert(1, 30)
print('插值后ls:', ls)
ls.reverse()
print('反转后ls:', ls)
ls.sort()
print('排序后ls:', ls)
ls.sort(reverse=True)
print('降序排序后ls:', ls)
sum(ls)
print('ls求和:', sum(ls))

结果:

+10以后此时ls: [1, 2, 3, 4, 5, 6, 7, 10]
插值后ls: [1, 30, 2, 3, 4, 5, 6, 7, 10]
反转后ls: [10, 7, 6, 5, 4, 3, 2, 30, 1]
排序后ls: [1, 2, 3, 4, 5, 6, 7, 10, 30]
降序排序后ls: [30, 10, 7, 6, 5, 4, 3, 2, 1]
ls求和: 68

列表元素遍历
注意:

  • 如果对元素访问时不需要删除操作,则可直接遍历列表。
  • 如果对元素访问时涉及删除或改变元素位置等操作,则应先对原列表进行复制,在复制的列表中遍历,而在原列表中操作,这样可以保证每个元素都能被遍历并进行操作。

例:对列表元素求平均值
分析:对列表中的每个元素进行访问,对它们的值进行累加,再将累加结果除以列表长度即可得到列表的平均值。在这个过程中,不需要改变元素的位置,可以直接对列表进行遍历

ls = [1, 2, 3, 4]
sum = 0
for i in ls:sum+=i
print('列表元素平均值:',sum/len(ls))

例:删除3的倍数。
指定列表[23,45,78,87,11,67,89,13,243,56,67,311,431,111,141]中,请将其中所有为3的倍数的元素删除,并输出剩余的元素及删除元素的个数
分析:。一旦涉及元素的删除,就会导致列表的元素索引号发生改变,为保证每个元素都能被遍历,故需要先复制列表,在复制的列表中遍历,在原列表中删除。
代码:

ls = [23, 45, 78, 87, 11, 67, 89, 13, 243, 56, 67, 311, 431, 111, 141]
lt = ls.copy()
count = 0
print('删除后列表元素是', end=' ')
for i in lt:if i % 3 == 0:ls.remove(i)count += 1else:# 注意end里 空格print(i, end=' ')
print('\n 一共删除{}个元素'.format(count))

结果:

删除后列表元素是 23 11 67 89 13 56 67 311 431一共删除6个元素

集合类型

  • 集合中的元素不可重复,元素类型只能是固定数据类型,不能是可变数据类型。
    如整数、浮点数、字符串、元组等可以作为集合的数据项,而列表、字典和集合类型则不能作为集合的元素出现
  • 集合是无序的组合,没有索引和位置的概念,不能分片,集合中的元素可以动态增加或删除。
  • 由于集合中的元素都是唯一的,可以使用集合类型过滤重复元素。
s1 = {100, 'fff', 20.6}
print('{}方式创建的s1:', s1)
# set()参数为字符串
s2 = set('python')
print('set方式创建的s2:', s2)
# set() 参数为元组
s3 = set(('python', 123))
print('set方式创建的s3:', s3)

结果:

{}方式创建的s1: {'fff', 100, 20.6}
set方式创建的s2: {'o', 't', 'n', 'h', 'p', 'y'}
set方式创建的s3: {'python', 123}

注意:空集合只能由set()函数创建。空{}创建的集合默认为字典类型

映射类型

映射类型是键-值数据项的组合,每一个元素都是一个键-值对,即元素是(key,value),元素之间是无序的。键-值对(key,value)是一种二元关系,源于属性和值的映射关系.这种通过任意键信息查找一组数据中值信息的过程称为映射,在Python中,映射类型主要以字典(dict)进行体现.

  1. 字典创建
  • 字典是包含0个或多个键-值对的无序集合,没有长度限制,可以根据键索引值的内容,且键具有唯一性。
  • 创建方式:dict()来创建空字典,也可以通过大括号{}来创建
    注意:字典输出数据的顺序可能与创建之初的顺序不一致。其原因是字典是集合类型的延续,所以各元素之间没有顺序之分,如果想保持一个集合中各元素的顺序,需要使用列表。
  1. 字典操作
    d.keys() :返回所有键信息;
    d.values() : 返回所有值信息
    d.items() : 返回所有键-值对
    d.get(key,default): 键存在返回相应的值,不存在返回默认值 (注意:传入的是key,返回的是value!)
    del d[key] :删除字典d中某一个键-值对
    注意:
    如果希望以keys()、values()、items()方法返回列表类型,可用list()函数进行转换

  2. 字典遍历

例:计算消费额
小明在咖啡店里点了双人下午套餐,包含两杯咖啡和两份点心:一杯卡布奇诺32元,一杯摩卡30元,一份抹茶蛋糕28元,一份布朗尼蛋糕36元,请帮忙用Python计算并输出消费总额

menu = {'coffee': 38, 'coffee2': 30, 'cake': 28, 'cake2': 26}
total = 0
for key in menu:total += menu[key]
print('一共消费{}元'.format(total))

例:词频统计
词频统计本质就是词语数量的累加问题,对每个词语设计一个计数器,每出现一次,相应地计数器就加1。因为一篇文章中的词语量比较大,为避免词语计数器发生混乱,可以将词语与相应的计数器组成一对键-值
步骤:
第1步,获取英文文本。内容存储在文本文件中,此处需要用到后续博客的文件打开与读取方法。打开文件:open(文件名,打开方式),读取全文:read()。
第2步,统一大小写。由于同一个单词会存在大小写不同的形式,但计数时应该不区分大小写,将它们归为一个单词。统一转换为小写:lower()。
第3步,去掉标点符号。标点符号不参与计数,为避免标点符号对分词造成影响,需要将原文中的各类标点符号用replace()方法替换成空格。
第4步,提取单词。利用相应的方法将单词进行分解并提前,英文文本以空格或标点符号来分隔词语,获得单词并统计数量相对容易。统一用空格来分离单词:split()。
第5步,创建字典,用于存储词语及对应的计数器。
第6步,遍历文本,对计数器值进行修改。计数器值的变化就是对值进行修改,而修改是在原有的基础上进行加1,则可以使用字典的
“d.get(key,default)+1”方式实现,如果词语在字典中已存在,则获得原有值,在这个值的基础上加1,如果这个词语不存在,则将它的默认值设为0,表示第1次出现。
第7步,字典转换为列表,按词频排序。由于字典是无序的,如果要显示词频最高的词语,需要先转换为序类型,才能实现排序。转换函数:list(),排序函数:sort(),字典转换为列表后是一个二元关系,即二维列表,排序需要使用key属性,使用lambda函数指定排序的依据。
第8步,遍历列表,输出词语及词频。按需要将前10个高频词及次数输出。

代码:

# 词频统计
def get_text():file = open()text = file.read()text = text.lower()for char in '!"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~':text = text.replace(char, ' ')return texttxt = get_text()
words = txt.split()
counts = {}
for w in words:counts[w] = counts.get(w, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(10):word, count = items[i]print("{:<12}{:>5}".format(word, count))

相关内容

热门资讯

欧盟开查马斯克旗下聊天机器人 欧盟委员会今天1月26日宣布,依据《数字服务法案》,对美国企业家马斯克旗下社交平台X启动一项新的正式...
中国证监会发布《公开募集证券投... 为落实《推动公募基金高质量发展行动方案》,坚持以投资者为本,规范公募基金业绩比较基准的选取和使用,切...
2025业绩快报来了!招行、兴... 2025年上市业绩快报正在密集披露。 截至目前,已有多家A股上市银行发布2025年业绩快报,包括、、...
国企董事长殴打他人被拘留,官方... 今早(27日),山西太原市国资委发布情况通报: 近日,有媒体反映太原酒厂董事长荣某锋涉嫌殴打他人并被...
1年融资30亿,曦望GPU真猛... 文:韦亚军 摄影:Bob 其背后资方阵容相当豪华,至少涵盖25家知名的VC/PE机构、大厂以及国资...
多地专卖店暂停马茅提货!错版乌... 本文来源:时代财经 作者:林心林 一笔之差,“意外”搅动了茅台生肖酒市场。 图源:贵州茅台官微 ...
两月股价增两倍,太空光伏点燃迈... 当前市场上HJT电池设备供应商较为稀缺,迈为股份受到市场热捧。 图片来源:界面图库 图片来源:W...
【立方早知道】特朗普宣布:加征... 第 806 期 2026-01-27 焦点事件 紫金矿业拟280亿元收购联合黄金100%股权 ...
向渠道要效率,理想汽车:将关闭... 根据第一财经等媒体近日报道,理想汽车将关闭部分门店,主要涉及部分能效低、扩张期布局的门店。1月26日...
男人必看:守护“生命腺”,这4... 对于男性而言,前列腺就像一颗“隐形的定时炸弹”,看似默默无闻,却承载着排尿、生殖等关键生理功能,是维...
广合科技预盈约10亿股价创新高... 来源:长江商报 长江商报消息 ●长江商报记者 沈右荣 突破百元,A股上市不到两年的广合科技(001...
特朗普称提高对韩国多种商品关税... 当地时间1月26日,美国总统特朗普在其社交平台“真实社交”发文表示,由于韩国国会未批准并落实此前与美...
金价狂飙带火银行保管箱!租金翻... 封面新闻记者 邹阿江 杨芮雯 最近金价涨“疯”了。国际贵金属价格连创新高,今日早间,黄金、白银、铂金...
必须做人形机器人!李想召开全员... 看来 2026 年,无论是科技公司,还是汽车公司,都在开始往 AI 赛道发力。 这不,理想汽车也来了...
埃夫特:预计2025年度净利润... 每经AI快讯,埃夫特1月26日晚间发布业绩预告,预计2025年年度实现归属于母公司所有者的净利润与上...
6天破6关 黄金急涨三问 伦敦现货黄金走势图(单位:美元/盎司)   郭晨凯 制图   美元指数走势图   美元走弱为金价上涨...
为什么很多企业做了GEO却没效... 2024 年开始,越来越多企业意识到: 流量不再只来自搜索排名,而来自 AI 的“回答权”。 于是,...
北京国丹医院祃开芬:白癜风与头... 头皮是白癜风常见发病部位之一,因被发丝覆盖易被忽视,且受洗护、摩擦等影响护理难度较高,科学养护头皮能...
上期所调整白银、锡期货相关合约... 【上期所调整白银、锡期货相关合约交易限额】财联社1月26日电,上期所发布通知,根据《上海期货交易所风...