On Jan 14, 2005, at 23:28, kumar s wrote:

for i in range(len(what)):
        ele = split(what[i],'\t')
        cor1 = ele[0]
        for k in range(len(my_report)):
                cols = split(my_report[k],'\t')
                cor = cols[0]
                if cor1 == cor:
                        print cor+'\t'+ele[1]+'\t'+cols[1]+'\t'+cols[2]


164:623 6649 TCATGGCTGACAACCCATCTTGGGA 484:11 6687 ATTATCATCACATGCAGCTTCACGC 490:339 6759 GAATGGGGCCGCCAGAACACAGACA 247:57 6880 AGTCCTCGTGGAACTACAACTTCAT 113:623 6901 TCATGGGTGTTCGGCATGACCCCAA

Okay, so the idea is, the first column of each row is a key, and you want to display only the rows whose key is the first column (key?) of a row in my_report, right?


As Danny said, you should use dictionaries for this, with a structure in the lines of:

what = {        '164:623': '6649        TCATGGCTGACAACCCATCTTGGGA',
                '484:11': '6687 ATTATCATCACATGCAGCTTCACGC',
                '490:339': '6759        GAATGGGGCCGCCAGAACACAGACA',
} (etc.)


Lacking that, as Danny said, nested loops are a huge time sink. Also, you should avoid using C-style for loops -- Python-style for loops (equivalent to Perl's foreach) are much more elegant (and probably faster) in that case. Here's how I would do it with your data structures (warning, untested code, test before use):


# First, create a list where each element is one of the keys in my_report
# Also, strings have a split() method, which by default splits on any whitespace
# (tabs included)
headers = [element.split()[0] for element in my_report]


for element in what:
# Okay, the nested loop is still (more or less) there, but it occurs within a
# 'in' operator, and is therefore executed in C -- much faster.
if element.split()[0] in headers:
print element


Also, it's shorter -- 4 lines, comments aside. Nevertheless, as Danny suggested, an approach using dictionaries would blow this away, speed-wise.


Hope that helps,
-- Max
maxnoel_fr at yahoo dot fr -- ICQ #85274019
"Look at you hacker... A pathetic creature of meat and bone, panting and sweating as you run through my corridors... How can you challenge a perfect, immortal machine?"


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to