求python list 替换元素中list的元素个数,怎么写

3760人阅读
Python(26)
在《【Python】利用setdefault函数实现dict的转置(key与value对互换),统计value出现的次数》()中介绍过,如何统计dict中相同value的key的出现次数。本文介绍如何利用list自带的count函数,来统计list中每个元素出现的次数。
具体代码如下:
arr_appear=dict((a,arr.count(a)) for a in arr);
是的,就一行,其中arr_appear是一个dict,arr是要统计的list。
如下代码:
# -*-coding:utf-8-*-
arr = [1, 2, 3, 2, 3, 1, 4];
arr_appear = dict((a, arr.count(a)) for a in arr);
print arr_
运行结果如下:
完成了一个求list中每个元素出现的次数的功能,返回一个dict,这个dict的key是list本身的元素,value是出现的次数。
本来arr.count(a),只是返回该元素的出现次数,这里只是在遍历这个list的同时,构造一个相应dict。
有了如上的理论,我们可以对《【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印到控制台》()中介绍过,求众数的方法进行改造,具体的代码如下:
# -*-coding:utf-8-*-
def get_mode(arr):
mode = [];
arr_appear = dict((a, arr.count(a)) for a in arr);
# 统计各个元素出现的次数
if max(arr_appear.values()) == 1:
# 如果最大的出现为1
# 则没有众数
for k, v in arr_appear.items():
# 否则,出现次数最大的数字,就是众数
if v == max(arr_appear.values()):
mode.append(k);
arr = [1, 2, 3, 2, 3, 1, 4];
print get_mode(arr);
运行的结果如下:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1235469次
积分:19656
积分:19656
排名:第422名
原创:720篇
评论:291条
先用屏幕录制软件Freez Screen Video Capture录制屏幕,再把得到的AVI,利用GIF Movie Gear转化成GIF博客访问: 449116
博文数量: 120
博客积分: 10
博客等级: 民兵
技术积分: 2121
注册时间:
while(!dead)
learning++;
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
对List进行排序,Python提供了两个方法
方法1.用List的内建函数list.sort进行排序
list.sort(func=None, key=None, reverse=False)&
Python实例:
&&&&list&=&[2,5,8,9,3]&&
&&&&list&&
[2,5,8,9,3]&&
&&&&list.sort()&&
&&&&list&&
[2,&3,&5,&8,&9]
方法2.用序列类型函数sorted(list)进行排序(从2.4开始)
Python实例:
&&&&list&=&[2,5,8,9,3]&&
&&&&list&&
[2,5,8,9,3]&&
&&&&sorted(list)&&
[2,&3,&5,&8,&9]
两种方法的区别:
sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象。
list.sort() 不会返回对象,改变原有的list。
其他sort的实例:
实例1:正向排序
&&&L&=&[2,3,1,4]
&&&L.sort()
&&&[1,2,3,4]
实例2:反向排序
&&&L&=&[2,3,1,4]
&&&L.sort(reverse=True)
&&&[4,3,2,1]
实例3:对第二个关键字排序&
&&&L&=&[('b',6),('a',1),('c',3),('d',4)]
&&&L.sort(lambda&x,y:cmp(x[1],y[1]))&
&&&[('a',&1),&('c',&3),&('d',&4),&('b',&6)]
实例4: 对第二个关键字排序&
&&&L&=&[('b',6),('a',1),('c',3),('d',4)]
&&&L.sort(key=lambda&x:x[1])&
&&&[('a',&1),&('c',&3),&('d',&4),&('b',&6)]
实例5: 对第二个关键字排序&
&&&L&=&[('b',2),('a',1),('c',3),('d',4)]
&&&import&operator
&&&L.sort(key=operator.itemgetter(1))&
&&&[('a',&1),&('b',&2),&('c',&3),&('d',&4)]
实例6:(DSU方法:Decorate-Sort-Undercorate)
&&&L&=&[('b',2),('a',1),('c',3),('d',4)]
&&&A&=&[(x[1],i,x)&for&i,x&in&enumerate(L)]&#i&can&confirm&the&stable&sort
&&&A.sort()
&&&L&=&[s[2]&for&s&in&A]
&&&[('a',&1),&('b',&2),&('c',&3),&('d',&4)]
以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项
为比较关键字进行排序.
效率比较:
cmp & DSU & key
通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当&
多关键字比较排序:
&&&L&=&[('d',2),('a',4),('b',3),('c',2)]
&&&&L.sort(key=lambda&x:x[1])
&&&[('d',&2),&('c',&2),&('b',&3),&('a',&4)]
我们看到,此时排序过的L是仅仅按照第二个关键字来排的,
如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?有两种方法&
&&&&L&=&[('d',2),('a',4),('b',3),('c',2)]
&&&&L.sort(key=lambda&x:(x[1],x[0]))
&&&[('c',&2),&('d',&2),&('b',&3),&('a',&4)]
&&&&L&=&[('d',2),('a',4),('b',3),('c',2)]
&&&&L.sort(key=operator.itemgetter(1,0))
&&&[('c',&2),&('d',&2),&('b',&3),&('a',&4)]
为什么实例8能够工作呢?原因在于tuple是的比较从左到右比较的,比较完第一个,如果相等,比较第二个
阅读(35862) | 评论(0) | 转发(5) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。列表与字典(还没接触到)是Python中两个主要的数据类型。他们可以被修改,可以增长可以缩短,也可以嵌套。
列表   list
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。
Python 的列表与C语言中的数组访问方法相同,通过偏移地址访问。
下面举几个列表的例子,图片来自《Python学习手册(第三版)》
为了加速进度以及方便查询,我们看一下对列表常用操作的整理,图片来自《Python学习手册(第三版)》
现在我们详细讲一下几个list的操作。
首先我们明确,Python的list可以容纳任何对象。不管他是什么格式的。
1)创建list
创建列表的操作非常简单,只要用中括号报过一系列逗号分隔的值就可以了。就像第一个图片上那样。
2)list 切片
定义新列表后,我们可以列表中的任何一个部分作为新的列表,该技术在dive in python 中称为切片。
让我们直接看程序。
a_list =['a','b','c','d','e','f']
# 创建一个列表
print a_list[1:3]
# 在屏幕上打印一个切片
值得注意的是,在list偏移访问中,与C中数组类似,同样用a_list[0]表示列表第一项。
上面的程序我们得到了如下的结果:
b c 分别是列表中第二,第三个元素,序号应该是1 和2 ,可以看出,对于 a_list[x,y] 的切片,切片片段为序号x到y-1之间的内容。
我们也可以截取半段,让我们看程序
a_list =['a','b','c','d','e','f']
print a_list[:3]
print a_list[3:]
从结果中我们可以看出,第一个片段[:3] 取的是从第一位到第三位的片段,而[3:] 获取的是从第四位,到结尾的片段。
无论列表多长[:n]片段中总含有n个元素。
如果将x,y都留空,那么程序将取列表内全部的元素,但是却获得了一个新的列表。
如果x , y中有负数怎么办,让我们来看一下
a_list =['a','b','c','d','e','f']
print a_list[-1:3]
print a_list[3:-1]
第一个print输出了空的list, 第二个却输出了两个。 认真看我们可以看出,负数是指从右往左数,正数是指,从左往右。
3)向列表list中添加元素
从第三题中,我们认识到append可以向list中添加元素。
a_list.append('NEW')
让我们测试一下这句话.
a_list =['a','b','c','d','e','f']
a_list.append('NEW')
print a_list
字符串 NEW 已经被添加到该列表结尾处了.
当然除了append 这种只能在末尾添加 元素 的操作来说,我们还要插入操作
a_list.insert( n,35434)
insert 后面有两个操作符, 那么n表示插入哪个元素之后, 那串数表示插入什么东西,当然任何类型的都可以,让我们试一下这个新认识的方法.
a_list =['a','b','c','d','e','f']
a_list.insert(2,'NEW')
print a_list
a_list.insert(6,)
print a_list
可以看到,插入位置是n号元素之前。
这两种操作都是单个元素插入,当我们需要将大量数据放在列表末尾的时候,我们就需要另一个新的方法了。
a_list.extend( [ 'fdaf',342 ] )
看一下例子就好了.
a_list =['a','b','c','d','e','f']
a_list.extend( [ 'fdaf',342 ] )
print a_list
当然我们还有更简单的在末尾扩增list的方法.
没错,就是一个符号.
a_list =['a','b','c','d','e','f']
a_list+=[ 'fdaf',342 ]
print a_list
看,我们得到了相同的结果!
4)在列表中查询
在C语言中,遍历数组什么的是常见的问题,我们需要知道,数组中有没有某个元素,某个元素在数组中的什么位置,某个元素在数组中出现的次数 等等等。这些也许在C中需要长篇累牍的描述算法,但是Python丰富的库资源已经把这些问题解决了。让我们看看下面的表吧:
a_list.count(
#计算出现次数
a_list.index( 'NEW' )
#寻找第一次出现的位置
'NEW' in a_list
#确认元素是否出现在list中
现在我们测试一下这几种功能。
a_list =['a','b','c','d','e','f']
print a_list.count(
#计算出现次数
print 'NEW' in a_list
#确认元素是否出现在list中
我们没有测试index,因为index 有个比较有趣的现象,让我们来试一下。
a_list =['a','b','c','d','e','f','NEW']
print a_list.index(
list中存在NEW,返回了正确的值。如果没有NEW会怎么样的呢
a_list =['a','b','c','d','e','f']
print a_list.index(
竟然提示错误,当然,这个就是引发了一个异常。之后我们会渐渐认识到这个做法的好处。
5)从列表中删除元素
既然我们插入了元素,那么我们也可以删除他,但是,元素的插入与删除并不像C语言那么麻烦,删除操作是如此的简单,大家看下例子就会了。
当我们知道元素的确切位置的时候,我们使用
del a_list[n]
当我们不知道位置,而是知道删除什么的时候,使用:
a_list.remove(
与求元素准确位置一样,如果删除一个list中不存在的元素会引发程序错误。
最后我们确认一点,空列表的布尔值为False,其他的列表均为Ture。
阅读(...) 评论()python&list&增加元素
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。python list 中找连续的数字_python list 数字_词汇网
python list 中找连续的数字
责任编辑:词汇网 发表时间: 19:39:08
线上有个需求,格式化,从一堆s1,s100-s199中找出连续的服并且格式化显示出来,如:神魔:S106-109,s123,s125御剑:s106-109,s123,s125源文件:神魔S125神魔S123神魔S109神魔S108神魔S10神魔S12神魔S13神魔S14神魔S107神魔S106御剑S125御剑S123御剑S109御剑S108御剑S107御剑S106得出结果:神魔S10,S12-14,S106-109,S123,S125,御剑S106-109,S123,S125,实现过程: 标签:
源码与演示:源码出处演示出处 代码片段(1)[全屏查看所有代码] 1.[代码][Python]代码 #!/usr/bin/env python# -*- coding: utf-8 -*- # #
14:15import sysfrom itertools import *from operator import itemgetterdef parse(filename): d = {} for line in open(filename, "r"): _line = line.split() d.setdefault(_line[0], []).append(_line[1]) for key in d.keys(): data = sorted(map(lambda x: int(x[1:]), d[key])) sys.stdout.write(key + " ") for k, g in groupby(enumerate(data), lambda (i, x): i - x): ret = map(itemgetter(1), g) if len(ret) > 1: sys.stdout.write("S%d-%d," % (ret[0], ret[-1])) elif len(ret) == 1: sys.stdout.write(str("S%s") % ret[0] + ",") sys.stdout.write("\n")if __name__ == "__main__": filename = sys.argv[1] parse(filename)
上一集:没有了 下一集:
相关文章:&&&&&&&&&&&&&&&&&&
最新添加资讯
24小时热门资讯
附近好友搜索}

我要回帖

更多关于 python list元素求和 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信