On 06/02/13 08:08, Hs Hs wrote:

Here is what I do :
f1 = open('test','r')
da = f1.read().split('\n')
dat = da[:-1]
dat
mpos = []

for i in range(len(dat)):
if dat[i].startswith('>'):
mpos.append(i)

mpos
[0, 3, 6, 9]

for item in range(len(mpos)):
start = mpos[item]
enda = item+1
end  = mpos[enda]-1
head = dat[start]
block  = dat[start+1:end]
for i in block:
print head+'\t'+i


You are thinking like a C programmer, not a Python programmer. You should 
almost never need to iterate over a range of numbers like this.

Instead, try something like this:

f = open('test')
head = '----'
for line in f:
    if line.startswith('>'):
        head = line[1:].rstrip()  # remove trailing newline
    else:
        print head + '\t' + line

f.close()



In general, you should iterate over collections of data directly. For example:

# WRONG
for i in range(len(data)):
    x = data[i]
    print x

# RIGHT
for x in data:
    print x



# WRONG
for i in range(len(data)):
    x = data[i]
    if x == 'spam':
        data[i] = 'ham'

# RIGHT
for i, x in enumerate(data):
    if x == 'spam':
        data[i] = 'ham'



Hope this helps.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to