首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中只解析列表中的重复项?

如何在Python中只解析列表中的重复项?
EN

Stack Overflow用户
提问于 2018-11-10 23:49:41
回答 3查看 265关注 0票数 1

例如,如果我有一个基因名称列表,并且我想创建一个只包含重复基因的新列表,我该如何做呢?

原始列表示例:

代码语言:javascript
运行
复制
RGN
RBM10
ARAF
ZNF630
FTSJ1
SLC35A2
SLC35A2
SLC35A2
MAGIX
DGKK
XAGE1B
XAGE1B
SMC1A
FAM120C
CXorf49
CXorf49B
CHIC1
ABCB7
PBDC1
FGF16
ATP7A
CYLC1
TSPAN6
BTK
BTK
TCEAL4
TEX13A
FRMPD3
PRPS1
COL4A6
COL4A6
COL4A6

例如,SLC35A2将出现在新列表中,因为它会重复3次。

请提个建议。

EN

回答 3

Stack Overflow用户

发布于 2018-11-11 00:19:27

collections.Counter让这一切变得快速而简单:

代码语言:javascript
运行
复制
from collections import Counter

# Using other answer's listOfGenes for convenience
listOfGenes = "RGN RBM10 ARAF ZNF630 FTSJ1 SLC35A2 SLC35A2 SLC35A2 MAGIX DGKK XAGE1B XAGE1B SMC1A FAM120C CXorf49 CXorf49B CHIC1 ABCB7 PBDC1 FGF16 ATP7A CYLC1 TSPAN6 BTK BTK TCEAL4 TEX13A FRMPD3 PRPS1 COL4A6 COL4A6 COL4A6".split()

# Actual work is a one-liner; count them all, keep those with count of 2 or more
duplicates = [gene for gene, cnt in Counter(listOfGenes).items() if cnt >= 2]

在Python3.6和更高版本(以及所有CPython解释器一旦达到3.7)提供插入顺序dict时,duplicates list将按照listOfGenes中第一次出现的顺序排序;在3.5和更早版本中,它将具有任意顺序。

票数 4
EN

Stack Overflow用户

发布于 2018-11-11 00:12:18

你可以这样做:

代码语言:javascript
运行
复制
listOfGenes = "RGN RBM10 ARAF ZNF630 FTSJ1 SLC35A2 SLC35A2 SLC35A2 MAGIX DGKK XAGE1B XAGE1B SMC1A FAM120C CXorf49 CXorf49B CHIC1 ABCB7 PBDC1 FGF16 ATP7A CYLC1 TSPAN6 BTK BTK TCEAL4 TEX13A FRMPD3 PRPS1 COL4A6 COL4A6 COL4A6".split(" ")

genesOccurences = {}
for gene in listOfGenes:
    occurence = genesOccurences.get(gene, 0)
    genesOccurences[gene] = occurence + 1

print(genesOccurences) # will print a dictionary with every gene and how often it is occurring

filteredGeneList = [ key for key in genesOccurences if genesOccurences[key] > 1 ]
print(filteredGeneList) # will print only those genes occurring > 1 times.
票数 1
EN

Stack Overflow用户

发布于 2018-11-11 04:43:26

时间复杂度= O(n)

  • Space复杂度= O(n)

  • Code:

def get_duplicates(数组):seen = set([]) results =数组中元素的set([]):if element in seen: results.add( element ) else: seen.add(element) return list(results) input_array = "RGN RBM10 ARAF ZNF630 FTSJ1 SLC35A2 MAGIX DGKK XAGE1B XAGE1B SMC1A FAM120C CXorf49 CXorf49B CHIC1 ABCB7 PBDC1 FGF16 ATP7A BTK BTK“inputprint(duplicates)

  • Output:= input_array.split() _array = get_duplicates(input_array)副本

['COL4A6', 'SLC35A2', 'XAGE1B', 'BTK']

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53240615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档