# [Tutor] Python Newbie: Lost in Loop

Fri Apr 4 20:42:51 CEST 2008

```Hi Yogi, welcome to Python!

yogi wrote:
...
>         if (str(gen) == str(row[0])):
>                 print 'Match for 16 found
Is the conversion to string really necessary?  Even if it is, do it once
for gen, when you define it:
gen = '16'
so you don't have to convert on every iteration of the loop.  I think
you want gen to be a integer, though, because you later compare it to

...
>                 for row[2] in range (rval0l,rval0u):
>                         print row

I don't think this bit is doing what you think it is.  For each
iteration you are assigning a value to the third element in the row list:
row[2] = 6009890
row[2] = 6009891
...
row[2] = 6009938
etc.
I don't think you want to loop over the range but instead want to check
to see if row[2] is between rval0l and rval0u.  You can do that by using

if x in some_list

which will return true if x is a member of the list.  range() will give
you the list of values to check against (but only create that list once
unless it changes on each row you are processing and in your code
example, it's not changing).  Remember, it's easy and enlightening to
test code on the Python command line:
>>> rval0l = 6009890
>>> rval0u = 6009939
>>> range(rval0l,rval0u)
[6009890, 6009891, 6009892, 6009893, 6009894, 6009895, 6009896, 6009897,
6009898, 6009899, 6009900, 6009901, 6009902, 6009903, 6009904, 6009905,
6009906, 6009907, 6009908, 6009909, 6009910, 6009911, 6009912, 6009913,
6009914, 6009915, 6009916, 6009917, 6009918, 6009919, 6009920, 6009921,
6009922, 6009923, 6009924, 6009925, 6009926, 6009927, 6009928, 6009929,
6009930, 6009931, 6009932, 6009933, 6009934, 6009935, 6009936, 6009937,
6009938]
>>> my_range = range(rval0l,rval0u)
>>> 6009893 in my_range
True
>>> 5 in my_range
False

gen = 16
idx_snp = 2
my_range = range(rval0l,rval0u)
for row in file:
snp = int(row[idx_snp])
if snp == gen:
print 'Found %s' % gen
if snp in my_range:
print "Found match:", row

Eric.
PS, if your input file is as simple as your example, the csv module
isn't getting you much benefit/complexity:

for row in open("divs.map"):
fields = row.split('\t')
print fields

```