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](),使其具有与计数器相同的行为