python 字典去重 python字典去重
Excel去重计数,8种方法!历史最全!
print(perm)问题很常见,但是对新手来说又比较棘手,所以我们来一期,系统讲讲,个人我个人的知识储备,大概写了8种,涵盖Excel的方方面面!一种也满足一下大家对于Python的好奇!
python 字典去重 python字典去重
python 字典去重 python字典去重
友情提醒:应该是目前你所能见到的最全面的了!先收藏!
需求:统计对应区域中不重复的人员个数?
方法1:辅助列+函数
这个方法函数新手使用,帮助刚入门的同学解决问题!
=SUMPRODUCT(($B$2:$B$15=$E2)/COUNTIFS($A$2:$A$15,$A$2:$A$15))
没有条件单纯的统计不重复内容,基本大家都知道使用SUM(1/COUNTIF(区域,区域))套路!如果有条件呢,我们可以把多个条件组合到一起,就变成一列了,然后使用单列不重复统计,再根据区域式的等于需求的区域过滤!
如果你是一个函数高手,那么不用辅助列也可以!
方法2:函数法(无辅助列)
这个应该不需要我过多的解释,只是把辅助列放到了公式中,单条件变多条件!
好吧!你说函数法都太难了,有没有小白可以实现的,试试吧!
方法3:表法(新手)
要点说明:在创建表时必须勾选添加到数据模型才可以使用不重复统计!
如果觉得上面的方法过于小白,那我们可以试试Power Query
方法4:Power Query
点击【转换】-【数据分组】-【非重复计数】确定即可!
在PQ中使用自带的分组功能,也能轻松搞定这样的需求!依旧不能再简单!(2, 1, 2, 1, 3, 3)
如果你想稍微酷点,那么使用VBA怎么样?
方法5:VBA
去重统计本是字典的强项,但是条件去重确实一点麻烦,不过可以使用双层字典即可轻松搞定!VBA爱好者,可以参考一下这种写法!
方法6:Power Pivot-DAX度量值
写个度量值,扔到表值字段即可!
其实到这里,也就不多了,不要总是说去重统计不会!
突然想起好久没写的SQL,好像我也懂一点点!要不写一下SQL,顺便练个手!
方法7:SQL法
select地区,count()as不重复人数from(select distinctfrom[data$]where地区<>null)group by地区
先使用子查询去重,再进行分组聚合计数即可!有SQL大佬欢迎提供好的思路!
好吧!我再写一个Python就收工吧!
方法8:番外-Python
df.drop_duplicates().groupby('地区').count()
pandas在数据统计方面再次刷新了我的认知,一句搞定!不要鼓吹python
但是pandas确实是一个数据分析非常好用的库,谁用谁知道!
基因家族:用python处理blast结果区域延伸的问题
方法一:不用语法糖@符号tblastn比对出来候选HSP区段,我们需要根据一定的基因长度范围来进行区域延伸去重叠,然后进行exonerate或者genewise建模。对HSP区域的延伸要考率基因的长度以及目标基因组scafflod or chromosome长度,不是一件容易的事情。
这里采用了dataclass以及改写 slots 存储数据方式,减少内存占用以及加快读取速度,attrgetter对列表字典结构排序,biopython里的SeqIO.parse感觉挺慢的,不过懒得重写了,用了据说更快的SimpleFastaParser来解析,实际测试下来速度确实更快,主要是用来存储scaffold或chromosome长度,以防延伸超出边界。
去重叠的原理在于先排序,然后判断前一区间的末尾是否小于后一区间开始,若为则重叠,根据长度/得分来判断删除前一区间还是后一区间。
以下运行得到的结果仍然是blast的tabular格式(之后可以经过一些简单的shell命令处理,可转成bed格式,结合bedtools批量提取序列)。
注:如果你需要去重的格式不为blast tabular,简单的利用一些工具如awk/sed/perl/python/shell各种改变格式就好,只需要第二列的id,第九列的序列起始,import itertools第十列的序列结束,第十二列的得分有意义,作为排序用到的字段,其余字段都可缺省
python?
=SUMPRODUCT(($A$2:$A$15=$D2)/COUNTIFS($A$2:$A$15,$A$2:$A$15,$B$2:$B$15,$B$2:$B$15))Python的是collections
关于set的定义:在我看来就像一个篮子,你可以往里面存东西也可往里面取东西,但是这些东西又是无序的,你很难指定单独去取某一样东西;同时它又可以通过一定的方法筛选去获得你需要的那部分东西。故可以 创建、增、删、关系运算。里面有元祖,列表,,字典
tuple list set dict
原组是不能修改的列表
是没有重复的列表
字典是键值对
python极简教程06:生成式和装饰器
for perm in permutations:测试奇谭,BUG不见。
这一场,主讲python的 生成式和装饰器。
目的:掌握四种生成式(列表、生成器、、字典),装饰器的原理和使用。
能够用一行代码,快速高效的生成数据。(这就不需要再通俗的讲解了吧)
举个例子:提取1-100之间的奇数
使用(),而不是 []
举个例子:列表元素去重
举个例子:字典kv反转
装饰器的作用:增强函数的功能,确切的说,可以装饰函数,也可以装饰类。
初学的你,还是太难理解?
你开,觉得自己的颜值不在线,于是乎,你===字符串使用美颜,增强装饰自己的颜值。
对于美颜这个功能来说,你可以用,我可以用,所有人都可以用,以此来增强装饰自己的颜值。
方法二:采用语法糖@符号
再举个例子:计算函数时间
python怎么输出数组中的元素
其本质使用的是Power Pivot的不重复统计功能!打印列表中出现前十的元素,可以利用列表的count属性,可以计数,然后根据数量多少排序 来输出元素
a = [1,'b','b',3,3,3,'d','d','d','d',5,5,5,5,5,'f','f','f','
f','f','f',7,7,7,7,7,7,7,'h','h','h','h','h','h','h','h',9,9
,9,9,9,9,9,9,9,'j','j','j','j','j','j','j','j','j','j',11,11
,11,11,11,11,11,11,11,11,11]
b = {} #定义空字典
for d in set(a): #去重复的值,set
b[a.count(d)] = d #去重后做计数,把数量和值写到字典b
for e in rrsed(sorted(b.keys())[-10:]):
print e,':',b[e] #排序列表键值并取后10个(数量最正下标 0 1 2 3 4 5大的10个),翻转后打印出数量与值。
求助一个Python问题,用字典与的知识解下面这个题,感谢大佬帮忙ԅ?
#根据课程名定义三个,course1,course2,course3
course1 = set(('李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清'))
course2 = set(('施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌'))
course3 = set(('陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清'))
#使用的union函数对3个元素进行去重整合,得到1个人员没有重复的choose_courses_person
choose_courses_person = course1.union(course2,course3)
#总人数为25人,所以用25减去choose_courses_person的长度就是没有选课的人数
not_choose_num = 25-len(choose_courses_person)
print("没有选课的同学有{}人".format(not_choose_num))
#定义3个空列表,用来存放选1门课,2门课,3门课的人员(根据标题说的数据类型没有列表,这里也可以使用空,如course_one=set(),后面的append方法改为add)
course_one = []
course_two = []
course_three = []
#num用来存放下面for循环中每个person到底选了几门课
num = 0lst = [1,2,3,4,5]
for person in choose_courses_person:
if person in course1:
num +=1
if person in course2:
num +=1
if person in course3:
num +=1
if num == 1:
course_one.append(person)
if num ==2:
course_two.append(person)
if num ==3:
course_three.append(person)
#每个person执行后要将num清零,这样不会影响下个person
num = 0
print("有{}个学生修选了1门课,他们是: {}".format(len(course_one), ','.join(course_one)))
print("有{}个学生修选了2门课,他们是: {}".format(len(course_two), ','.join(course_two)))
print("有{}个学生修选了3门课,他们是: {}".format(len(course_three), ','.join(course_three)))
把上面的内容放到.py文件中,给执行权限,运行后结果为:
没有选课的同学有12人
有9个学生修选了1门课,他们是: 施然,刘潇,孙一航,李芳芳,施小冉,刘培良,黄煌,李雷,王晓刚
有3个学生修选了2门课,他们是: 张玉,司马清,陈红静
有1个学生修选了3门课,他们是: 方向
.上面写的这个有些地方可能不太符合题目要求,希望能有所帮助吧.
已知信息可以用字典表示:
[]列表中分别是课程123中的报名的同学的名字
问题1:这个字典d中lesson123的元素合并去重后就是所有报名的同学人数n,25-n就是
问题2:计算有多少的元素in d["lesson1"]d["lesson2"]d["lesson3"]中的两个
问题3:计算有多少的元素in d["lesson1"]d["lesson2"]d["lesson3"]中的三个
问题4:计算有多少的元素in d["lesson1"]d["lesson2"]d["lesson3"]中的一个,未重复报名
希望我的回答对你有帮助,你的采纳就是的鼓励~
people=['李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清','施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌','陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清']
newdic={}
for i in people:
if newdic.get(i):
newdic[i]+=1在PP中使用DAX函数DISTINCTCOUNT,可以非常简单的统计不重复的个数
newdic[i]=1
print(25-len(set(people))) #没选课人数
循环newdic,key是人名,value是课程数量
python?
Python的是collections
里面有元祖,列表,,字典
tuple list set lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5] dict
原组是不能修改的列表
是没有重复2--reduce()函数的列表
字典是键值对
python中有哪些基本数据类型
python的基本数据类型有哪些?下面一一给大家介绍:
1、数字 ---> int类
当然对于数字,Python的数字类型有int整型、long长整型、float浮点数、complex复数、以及布尔值(0和1),这里只针对int整型进行介绍学习。
在Python2中,整数的大小是有限制的,即当数字超过一定的范围不再是int类型,而是long长整型,而在Python3中,无论整数的大小长度为多少,统称为整型int。
其主要方法有以下两种:
int -->将字符串数据类型转为int类型, 注:字符串内的内容必须是数字
bit_length() -->将数字转换为二进制,并且返回最少位二进制的位数
2、布尔值 --->bool类
对于布尔值,只有两种结果即True和False,其分别对应与二进制中的0和1。而对于真即True的值太多了,我们只需要了解即Flase的值有哪些---》None、空(即 [ ]/( ) /" "/{ })、0;
相关:《python视频教程》
3、字符串 --->str类
关于字符串是Python中最常用的数据类型,其用途也很多,我们可以使用单引号 ‘’或者双引号“”来创建字符串。
字符串是不可修改的。所有关于字符我们可以从 索引、切片、长度、遍历、删除、分割、清除空白、大小写转换、判断以什么开头等方面对字符串进行介绍。
创建字符串
切片
索引--> index()、find()
index()与find()的不同之处在于:若索引的该字符或者序列不在字符串内,对于index--》ValueError: substring not found,而对于find -->返回 -1。
注:len()方法-->同样可以用于其他数据类型,例如查看列表、元组以及字典中元素的多少。
删除 --> del
判断字符串内容 --> isalnum()、isalpha()、isdigit()
大小写转换 --> capitalize()、lower()、upper()、title()、casefold()
判断以什么开头结尾 --> startswith()、endswith()
扩展-->expandtabs()
格式化输出-->format()、format_map()
join方法
分割 --> split()、partition()
替代 -->replace
替换 -->makestran 、translate
4、列表 --->list类
列表是由一系列特定元素顺序排列的元素组成的,它的元素可以是任何数据类型即数字、字符串、列表、元组、字典、布尔值等等,同时其元素也是可修改的。
其形式为:
names = ['little-five","James","Alex"]2 #或者3 names = list(['little-five","James","Alex"])
插入索引、切片
追加-->append()
拓展-->extend()
注:扩展extend与追加append的区别:-->前者为添加将元素作为一个整体添加,后者为将数据类型的元素分解添加至列表内。例:
insert() -->插入
pop() -->取出
remove()-->移除、del -->删除
sorted()-->排序,默认正序,加入rrse =True,则表示倒序
5、元组 --->tuple类
元组即为不可修改的列表。其于特性跟list相似。其使用圆括号而不是方括号来标识。
#元组name = ("little-five","xiaowu")print(name[0])
6、字典 --->dict类
字典为一系列的键-值对,每个键值对用逗号隔开,每个键都与一个值相对应,可以通过使用键来访问对应的值。无序的。
键的定义必须是不可变的,即可以是数字、字符串也可以是元组,还有布尔值等。
而值的定义可以是任意数据类型。
遍历 -->s、keys、values
7、 -->set类
的特性:
1、去重
2、无序
3、每个元素必须为长度 -->len()不可变类型即(hashable类型,可作为字典的key)。
创建:set、frozenset
增: add、update
关系运算:交集 & 、并集 | 、集 - 、交补集 ^ 、 issubset 、isupperset
判断两个的关系是否为子集、父集 --> issubset 、isupperset
深入理解Python reduce函数
字典是一种key---value的数据类型,使用就像我们使用字典,通过拼音或笔画查找字的详细类容例如上面的例子,实现一个整形的累加。设lst = [1,2,3,4,5],实现累加的方式有很多:
# 原始列表sum(lst)
第二种:循环方式。
def customer_sum(lst):
result = 0
result+=x
return result
def customer_sum(lst):
result = 0
while lst:
temp = lst.pop(0)
result+=temp
return result
if name ==" main ":
print customer_sum(lst)
第三种:递推求和
def add(lst,result):
if lst:
temp = lst.pop(0)
temp+=result
return add(lst,temp)
return result
if name ==" main ":
print add(lst,0)
第四种:reduce方式
print reduce(lambda x,y:x+y,lst)
print reduce(lambda x,y:x+y,lst,0)
def add(x,y):
return x+y
print reduce(add, lst)
def add(x,y):
return x+y
print reduce(add, lst,0)
有一个序列,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个所有键的重复个数,例如1出现了两次,2出现了两次等。大致的思路就是用字典存储,元素就是字典的key,出现的次数就是字典的value。方法依然很多
种:for循环判断
def statistics(lst):
dic = {}
for k in lst:
if not k in dic:
dic[k] = 1
dic[k] +=1
return dic
print(statistics(lst))
第二种:比较取巧的,先把列表用set方式去重,然后用列表的count方法
def statistics2(lst):
m = set(lst)
dic = {}
for x in m:
dic[x] = lst.count(x)
print statistics2(lst)
第三种:用reduce方式
def statistics(dic,k):
if not k in dic:
dic[k] = 1
dic[k] +=1
return dic
print reduce(statistics,lst,{})
或者
d = {}
d.extend(lst)
print reduce(statistics,d)
通过上面的例子发现,凡是要对一个进行作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce方式实现。
python中都有哪些数据类型
3--实例解释python中数据类型有:整型、长整型、浮点型、字符串类型、布尔类型、列表类型、元组类型、字典类型、类型。
顾名思义:增强函数或类的功能的一个函数。数据类型是每种编程语言必备属性,只有给数据赋予明确的数据类型,计算机才能对数据进行处理运算,因此,正确使用数据类型是十分必要的,不同的语言,数据类型类似,但具体表示方法有所不同,以下是Python编程常用的数据类型:
1. 数字类型
Python数字类型主要包括int(整型)、long(长整型)和float(浮点型),但是在Python3中就不再有long类型了。
int(整型)
在32位机器上,整数的位数是32位,取值范围是-231~231-1,即-2147483648~214748364;在64位系统上,整数的位数为64位,取值范围为-263~263-1,即9223372036854775808~9223372036854775807。
long(长整型)
Python长整型没有指定位宽,但是由于机器内存有限,使用长的长整数数值也不可能无限大。
float(浮点型)
浮点型也就是带有小数点的数,其精度和机器有关。
complex(复数)
Python还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。
2. 字符串
在Python中,加了引号的字符都被认为是字符串,其声明有三种方式,分别是:单引号、双引号和三引号;Python中的字符串有两种数据类型,分别是str类型和unicode类型,str类型采用的ASCII编码,无法表示中文,unicode类型采用unicode编码,能够表示任意字符,包括中文和其他语言。
3. 布尔型
和其他编程语言一样,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False()。
4. 列表
列表是Python中使用最频繁的数据类型,中可以放任何数据类型,可对进行创建、查找、切片、增加、修改、删除、循环和排序作。
5. 元组
元组和列表一样,也是一种序列,与列表不同的是,元组是不可修改的,元组用”()”标识,内部元素用逗号隔开。
6. 字典
字典是一种键值对的,是除列表以外Python之中最灵活的内置数据结构类型,列表是有序的对象,字典是无序的对象。
7.
是一个无序的、不重复的数据组合,它的主要作用有两个,分别是去重和关系测试。
课程:Python3机器学习快速入门(黑马程序员)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。