Python 比较行中的元素

Python 比较行中的元素,python,Python,我有这样的数据 contig34706 sp|A1IVM0|A1IVM0_TRIDB 96 contig118453 sp|A1IVM0|A1IVM0_TRIDB 98 contig12943 tr|A7XPA0|A7XPA0_TRIDB 96 contig92741 tr|A7XPA0|A7XPA0_TRIDB 96 contig92741 tr|A8QU19|A8QU19_TRIDB 94 contig523 tr|A9U8G7|A9U8G

我有这样的数据

contig34706   sp|A1IVM0|A1IVM0_TRIDB  96
contig118453  sp|A1IVM0|A1IVM0_TRIDB  98
contig12943   tr|A7XPA0|A7XPA0_TRIDB  96    
contig92741   tr|A7XPA0|A7XPA0_TRIDB  96    
contig92741   tr|A8QU19|A8QU19_TRIDB  94
contig523     tr|A9U8G7|A9U8G7_TRIDB  94    
contig14487   tr|A9U8G7|A9U8G7_TRIDB  95
contig80716   tr|A9U8G7|A9U8G7_TRIDB  93
我想知道文件中有多少重叠和蛋白质,但显然没有考虑重复的元素,所以我想将第[1]行中的元素相互比较,并计数和打印元素,但是重复的元素。第[0]行也是如此

import re
count = 0
lines = open("file.txt", "r").readlines()
for line in lines:
    new_list=re.split(r'\t+',line.strip())
    contig=new_list[0]
    protien=new_list[1]
    for element in contig:
        if element != element:
            count += 1
        else:
嗯,我不知道如何结束,如果这是一个正确的方式。。。 我的期望输出

 sp|A1IVM0|A1IVM0_TRIDB  96
 tr|A7XPA0|A7XPA0_TRIDB  96        
 tr|A8QU19|A8QU19_TRIDB  94
 tr|A9U8G7|A9U8G7_TRIDB  94    
我想知道档案里有多少份接触者和蛋白质

这是一种方法:

from collections import defaultdict
count_contig = defaultdict(int)
count_protein = defaultdict(int)
with open('file.txt') as f:
    for line in f:
        line = line.split()
        count_contig[line[0]] += 1
        count_protein[line[1]] += 1
print 'Number of unique contigs:', len(count_contig)
print 'Number of unique proteins:', len(count_protein)
输出:

sp|A1IVM0|A1IVM0_TRIDB   96
tr|A7XPA0|A7XPA0_TRIDB   96
tr|A8QU19|A8QU19_TRIDB   94
tr|A9U8G7|A9U8G7_TRIDB   94
唯一重叠数:7

独特蛋白质数量:6

您可以访问每个重叠/蛋白质的实际出现次数,如下所示:

count_contig['contig92741'] # returns 2
count_contig['unknown_contig'] # returns 0, thanks to defaultdict
要列出重叠群/蛋白质的唯一数量,只需访问字典的键:

print 'Unique contigs are:', count_config.keys()
print 'Unique protens are:', count_protein.keys()
输出:

sp|A1IVM0|A1IVM0_TRIDB   96
tr|A7XPA0|A7XPA0_TRIDB   96
tr|A8QU19|A8QU19_TRIDB   94
tr|A9U8G7|A9U8G7_TRIDB   94
独特的contig有:['contig12943'、'contig523'、'contig80716'、'contig118453'、'contig14487'、'contig34706'、'contig92741']

独特的蛋白质有:['tr | A9U8G7 | A9U8G7 | TRIDB','tr | A7XPA0 | A7XPA0 | TRIDB','tr | A8QU19 | A8QU19 | TRIDB','sp | A1IVM0 | A1IVM0 | TRIDB','sp | A5A8T8 | A5A8T8 | TRIDB','QTTR | A8QTZ7 | A8QTZ7 | TRIDB']

这真是太棒了,你应该试着了解更多

track=()
lines = open("file.txt", "r").readlines()
for line in lines:
    new_list=line.split()
    if new_list[1] not in track:
        print new_list[1]," ", new_list[2]
        track = (track, new_list[1])
我想知道档案里有多少份接触者和蛋白质

这是一种方法:

from collections import defaultdict
count_contig = defaultdict(int)
count_protein = defaultdict(int)
with open('file.txt') as f:
    for line in f:
        line = line.split()
        count_contig[line[0]] += 1
        count_protein[line[1]] += 1
print 'Number of unique contigs:', len(count_contig)
print 'Number of unique proteins:', len(count_protein)
输出:

sp|A1IVM0|A1IVM0_TRIDB   96
tr|A7XPA0|A7XPA0_TRIDB   96
tr|A8QU19|A8QU19_TRIDB   94
tr|A9U8G7|A9U8G7_TRIDB   94
唯一重叠数:7

独特蛋白质数量:6

您可以访问每个重叠/蛋白质的实际出现次数,如下所示:

count_contig['contig92741'] # returns 2
count_contig['unknown_contig'] # returns 0, thanks to defaultdict
要列出重叠群/蛋白质的唯一数量,只需访问字典的键:

print 'Unique contigs are:', count_config.keys()
print 'Unique protens are:', count_protein.keys()
输出:

sp|A1IVM0|A1IVM0_TRIDB   96
tr|A7XPA0|A7XPA0_TRIDB   96
tr|A8QU19|A8QU19_TRIDB   94
tr|A9U8G7|A9U8G7_TRIDB   94
独特的contig有:['contig12943'、'contig523'、'contig80716'、'contig118453'、'contig14487'、'contig34706'、'contig92741']

独特的蛋白质有:['tr | A9U8G7 | A9U8G7 | TRIDB','tr | A7XPA0 | A7XPA0 | TRIDB','tr | A8QU19 | A8QU19 | TRIDB','sp | A1IVM0 | A1IVM0 | TRIDB','sp | A5A8T8 | A5A8T8 | TRIDB','QTTR | A8QTZ7 | A8QTZ7 | TRIDB']

这真是太棒了,你应该试着了解更多

track=()
lines = open("file.txt", "r").readlines()
for line in lines:
    new_list=line.split()
    if new_list[1] not in track:
        print new_list[1]," ", new_list[2]
        track = (track, new_list[1])
如果第[2]行是新的,它将被打印并添加到元组中以跟踪重复

输出:

sp|A1IVM0|A1IVM0_TRIDB   96
tr|A7XPA0|A7XPA0_TRIDB   96
tr|A8QU19|A8QU19_TRIDB   94
tr|A9U8G7|A9U8G7_TRIDB   94
如果第[2]行是新的,它将被打印并添加到元组中以跟踪重复

输出:

sp|A1IVM0|A1IVM0_TRIDB   96
tr|A7XPA0|A7XPA0_TRIDB   96
tr|A8QU19|A8QU19_TRIDB   94
tr|A9U8G7|A9U8G7_TRIDB   94

您始终可以返回一个带有每个的计数的
dict

contigs = """contig34706   sp|A1IVM0|A1IVM0_TRIDB  96
contig118453  sp|A1IVM0|A1IVM0_TRIDB  98
contig12943   tr|A7XPA0|A7XPA0_TRIDB  96    
contig92741   tr|A7XPA0|A7XPA0_TRIDB  96    
contig92741   tr|A8QU19|A8QU19_TRIDB  94
contig523     tr|A9U8G7|A9U8G7_TRIDB  94    
contig14487   tr|A9U8G7|A9U8G7_TRIDB  95
contig80716   tr|A9U8G7|A9U8G7_TRIDB  93"""

from collections import Counter

contigs = [c.split()[1] for c in contigs.split("\n")]
contig_cnts = Counter(contigs)
如果您不关心计数,甚至可以设置一个
set

contig_set = set(contigs)

您始终可以返回一个带有每个的计数的
dict

contigs = """contig34706   sp|A1IVM0|A1IVM0_TRIDB  96
contig118453  sp|A1IVM0|A1IVM0_TRIDB  98
contig12943   tr|A7XPA0|A7XPA0_TRIDB  96    
contig92741   tr|A7XPA0|A7XPA0_TRIDB  96    
contig92741   tr|A8QU19|A8QU19_TRIDB  94
contig523     tr|A9U8G7|A9U8G7_TRIDB  94    
contig14487   tr|A9U8G7|A9U8G7_TRIDB  95
contig80716   tr|A9U8G7|A9U8G7_TRIDB  93"""

from collections import Counter

contigs = [c.split()[1] for c in contigs.split("\n")]
contig_cnts = Counter(contigs)
如果您不关心计数,甚至可以设置一个
set

contig_set = set(contigs)

你能把预期的输出,这将解释很多:)sp | A1IVM0 | A1IVM0 | TRIDB 96 sp | A5A8T8 | A5A8T8 | TRIDB 98 tr | A7XPA0 | A7XPA0 | TRIDB 96 tr A8QTZ7 | A8QTZ7 | TRIDB 94 tr A8QU19 | TRIDB 94 tr A9U8G7 | a9g7 |请不要重复这个问题,所以每个人都会看到。我收集了一些数据以使其更清晰。如果您试图以非重复的方式打印行以便于使用人眼进行计数,也许最好让代码进行计数?您能将预期的输出,这将解释很多:)sp | A1IVM0 | A1IVM0 | u TRIDB 96 sp | A5A8T8 | A5A8T8 | u TRIDB 98 tr | A7XPA0 | A8QTZ7 | u TRIDB 94 tr | A8QU19 | A8QU19 | u TRIDB 94 tr A9U8G7 | A9U8G7 |请不要重复这样的问题,所以每个人都会看到。我收集了一些数据以使其更清晰。如果你试图以非重复的方式打印这些行以便于使用人眼进行计数,也许最好让代码进行计数?惊人的答案!!非常感谢。如果我想让它打印出独特的重叠群和蛋白质的名称,该怎么办?
集合中有一个
计数器
。只需将
defaultdict(int)
替换为该值即可。惊人的答案!!非常感谢。如果我想让它打印出独特的重叠群和蛋白质的名称,该怎么办?
集合中有一个
计数器
。只需将
defaultdict(int)
替换为它。它说“无法导入名称计数器”,但与“defaultdict”一起工作,是因为python版本吗?@user3224522是的,对于py2.7+来说是新的,如果您使用的是早于python2.7的任何东西,它将不在其中。虽然您可以很容易地从activestate创建这个[bag recipe](),使其具有与
计数器相同的行为,但它表示“无法导入名称计数器”,但是可以与“defaultdict”一起使用,这是由于python版本吗?@user3224522是的,对于py2.7+来说是新的,如果您使用的是早于python2.7的任何东西,它将不在那里。虽然您可以很容易地从activestate创建此[bag recipe](),使其具有与
计数器相同的行为