Python list去重及找出,统计重复项

http://bbs.chinaunix.net/thread-1680208-1-1.html

如何找出 python list 中有重复的项

http://www.cnblogs.com/feisky/archive/2012/12/06/2805251.html

比较容易记忆的是用内置的set
l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]
l2 = list(set(l1))
print l2

还有一种据说速度更快的,没测试过两者的速度差别
l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]
l2 = {}.fromkeys(l1).keys()
print l2

这两种都有个缺点,祛除重复元素后排序变了:
[‘a‘, ‘c‘, ‘b‘, ‘d‘]

如果想要保持他们原来的排序:

用list类的sort方法
l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]
l2 = list(set(l1))
l2.sort(key=l1.index)
print l2
也可以这样写
l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]
l2 = sorted(set(l1),key=l1.index)
print l2

也可以用遍历
l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]
l2 = []
for i in l1:
if not i in l2:
l2.append(i)
print l2
上面的代码也可以这样写
l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]
l2 = []
[l2.append(i) for i in l1 if not i in l2]
print l2

这样就可以保证排序不变了:
[‘b‘, ‘c‘, ‘d‘, ‘a‘]

转自:http://blog.csdn.net/rainharder/article/details/5728443

 1 #!/usr/bin/env python
 2 # coding:   utf-8
 3
 4 import os
 5 import sys
 6 import string
 7 import operator
 8 import re
 9 import threading
10 import csv
11
12 from time import sleep,ctime
13 from collections import defaultdict
14 from collections import Counter
15
16
17 def test_01():
18     #content  ==>  ###pos=350143600,pts=2676718###
19     #filename="F:\\yingc\\work\\goxceed-dvbs-hd\\6605\\solution\\aa"
20     filename="./aa"
21     pos=-1
22     dts=-1
23     poslist=[]
24     dtslist=[]
25
26     str1="###pos="
27     str2=",pts="
28
29     f = open(filename)
30     for line in f:
31         aa=line[0:len(str1)]
32         if aa == str1:
33             pos=line[len(str1):line.index(str2)]
34             dts=line[line.index(str2)+len(str2):len(line)-3-1]
35             poslist.append(pos)
36             dtslist.append(dts)
37     f.close()
38
39     #s=[11,22,11,44,22,33]
40     d = defaultdict(list)
41     for k,va in [(v,i) for i,v in enumerate(poslist)]:
42         d[k].append(va)
43     #print  d.items()
44     count=0
45     for value in d.items():
46         if len(value[1])>1:
47             print value
48             count=count+1
49     print "poslen:"+str(len(poslist))+",dtslen"+str(len(dtslist))
50     print str(len(d))+","+str(count)
51
52     #d = defaultdict(list)
53     #for k,va in [(v,i) for i,v in enumerate(dtslist)]:
54     #    d[k].append(va)
55     ##print  d.items()
56     #for value in d.items():
57     #    if len(value[1])>1:
58     #        print value
59
60     #print Counter([11,22,11,44,22,33])
61
62
63
64
65 if __name__ == "__main__":
66     test_01()
67     print "finish"
68

aa文件中的内容如:

###pos=1349796,pts=15015###
###pos=2337820,pts=27986###
###pos=2705098,pts=29988###
###pos=6660200,pts=54721###
###pos=8055314,pts=61061###
###pos=8871800,pts=65315###
###pos=9503420,pts=68401###
###pos=12855218,pts=88338###
###pos=14253082,pts=98765###
###pos=15813764,pts=109192###
###pos=15813764,pts=109192###
###pos=15813764,pts=109192###
###pos=15813764,pts=109192###
###pos=16056146,pts=110735###
###pos=16394580,pts=113988###
###pos=17011532,pts=119911###
###pos=17257542,pts=122372###
###pos=17417974,pts=124040###
###pos=17816976,pts=128169###
###pos=17993398,pts=129838###
###pos=18302190,pts=132215###
###pos=19166088,pts=139055###
###pos=19675276,pts=143059###
###pos=19994992,pts=146146###

Python list去重及找出,统计重复项

时间: 2024-07-31 06:31:01

Python list去重及找出,统计重复项的相关文章

Python实用黑科技——找出最大/最小的n个元素

需求: 快速的获取一个列表中最大/最小的n个元素. 方法: 最简便的方法是使用heapq模组的两个方法nlargest()和nsmallest(),例如: In [1]: import heapqIn [2]: nums = [1, 0, -23, 45, 34, -11, 0, 2, 99, 103, -78]In [3]: print(heapq.nlargest(3, nums))[103, 99, 45]In [4]: print(heapq.nsmallest(3, nums))[-7

Python基础-生物信息:找出基因,生物学家使用字母A、C、T和G构成的字符串建模一个基因组。

生物信息:找出基因,生物学家使用字母A.C.T和G构成的字符串建模一个基因组.一个基因是基因组的子串,它从三元组ATG后开始在三元组TAG.TAA或TGA之前结束.此外,基因字符串的长度是3的倍数,而且基因不包含三元组ATG.TAG.TAA和TGA.编写程序提示用户输入一个基因组,然后显示基因组里的所有基因.如果在输入序列中没有找到基因,那么程序显示“no gene is found” s=input('Please input the Gene String:\r\n') endsplit=[

Python 脚本帮你找出微信上删除了你的“好友“

阅读OReilly.Web.Scraping.with.Python.2015.6笔记---找出网页中所有的href

1.查找以<a>开头的所有文本,然后判断href是否在<a>里面,如果<a>里面有href,就像<a href=" " >,然后提取href的值. from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen("http://en.wikipedia.org/wiki/Kevin_Bacon") bsObj = Beaut

一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)

数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们在博客用最复杂的方式学会数组(Python实现动态数组)这篇博客中介绍了数组这一结构的本质,并自己动手实现了一个动态数组. 今天我们介绍一下另一道来自<剑指Offer>的关于数组的面试题--不修改数组找出重复的数字. 不修改数组找出重复的数字 题目二:不修改数组找出重复的数字 给定一个长度为 n+

找出数组中唯一重复的数(转)

题目: 数组a[N],1至N-1这N-1个数存放在a[N]中,其中某个数重复一次.写一个函数,找出被重复的数字. 方法一:异或法. 数组a[N]中的N个数异或结果与1至N-1异或的结果再做异或,得到的值即为所求. 设重复数为A,其余N-2个数异或结果为B. N个数异或结果为A^A^B 1至N-1异或结果为A^B 由于异或满足交换律和结合律,且X^X = 0  0^X = X; 则有 (A^B)^(A^A^B)=A^B^B=A 代码: #include <stdio.h> #include &l

面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!

/* * 问题:找出101个数据中重复的元素 * 题目如下:现有0到99,共计100个整数,各不相同,将所有数放入一个数组,随机排布. *        数组长度101,多余的数字是0到99其中任意一个数(唯一重复的数字) *        请将这个重复的数字找出来 * 分析: *    A:把数组构造出来 *    B:把数组元素添加进去 *    C:对数组的元素进去打乱(随机分布) *    D:找出重复的元素 */ 这道题有三种方式:第一种用交换排序找出,第二种求数组的和再减去0-99,

2015年 【华为c++技术面试题】找出重复的数字

面试题目: 1-100共100个数,外加一个重复的数字,共101个:这101个数是乱序的,让你找出这个重复的数字: 解题思路: 这个重复的数=这101个数的和-5050(1-100的和): C++代码: 结果展示:

[Python Tips]如何找出Python list中有重复的项

如果一个Python list中有很多重复的项,如何有效地找到多少重复的项呢? 可以使用collection的Counter方法.. >>> from collections import Counter >>> Counter([11,22,11,44,22,33]) Counter({11: 2, 22: 2, 33: 1, 44: 1}) [Python Tips]如何找出Python list中有重复的项,布布扣,bubuko.com