Adam -4 years ago 130

Python Question

My problem: I have a

`csv`

ex. (depth) 88, 77, 50, 20, 5, 90, 76, 54, 34, 15, 8, 4, 81, 74, 62,51, 49, 30, 22, 10, 8... and so on. It keeps goes from 90 to 3, and back again.

What I want to do is to separate the data each time it goes between 90 and 3. Once it is separated I want to take the last and first values in that list.

Like so

ex. 88, 77, 50, 20, 5 (separate here), 90, 76, 54, 34, 15, 8, 4 (separate here) 81, 74, 62,51, 49, 30, 22, 10, 8 separate here)... and so on. It keeps goes from 90 to 3, and back again.

How do I go about doing this? Or how would I separate them into them into lists and then use data from each of them?

Here's the code I have so far:

`import csv, numpy`

from collections import defaultdict

columns = defaultdict(list) # each value in each column is appended to a list

with open('C:\\Users\\AdamStoer\\Documents\\practicedata.csv') as f:

reader = csv.DictReader(f,delimiter=',') # read rows into a dictionary format

for row in reader:

r = float(row['roll'])

p = float(row['pitch'])

if 0.21 <= p <= 0.31:

if -0.06 <= r <= 0.06:

columns['pitch'].append(row['pitch'])

columns['roll'].append(row['roll'])

columns['i_depth'].append(row['i_depth'])

columns['irrad2'].append(row['sci_ocr504i_irrad2'])

print ('Pitch:')

print (columns['pitch'])

print ('Roll:')

print (columns['roll'])

print ('Depth')

print (columns['i_depth'])

print ("Irrandiance(2):")

print (columns['irrad2'])

irradlst = columns['irrad2']

irradfirst = irradlst[0]

irradlast = irradlst[-1]

depthlst = columns['i_depth']

depthfirst = depthlst[0]

depthlast = depthlst[-1]

print ("\nDepth 1 is " + depthfirst + " and " + "Depth 2 is " + depthlast)

print ("\nIrradiance 1 is " + irradfirst + " and " + "Irradiance 2 is " + irradlast)

#Find the Volume Attenuation Coefficient

#irranddiv = deepest/shallowest

irraddiv = float(irradfirst)/float(irradlast)

#depthdif = deepest-shallowest

depthdif = float(depthfirst) - float(depthlast)

#Find Log of irraddiv

irradlog = numpy.log(irraddiv)

#Find K

K = irradlog/(-depthdif)

print("\nAttenuation Coefficient")

print (K)

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

well your code is a little complicated and i don't know numpy, anyway this is a solution i came up with for separating range of number:

```
l = [88, 77, 50, 20, 5, 90, 76, 54, 34, 15, 8, 4, 81, 74, 62,51, 49, 30, 22, 10, 8,65]
group =0 #since were using dictionaries i use group number as dictionary KEY to distinguish each group of number between 3 to 90
temp = [] # this is a list that we keep temporary group of our number ranged between 3 to 90
splited_list = {} #this is a dictionary that we keep our final result in side it
lengh = len(l) #this is a lengh of our list of numbers
for i in range(lengh): # we run our code for each number inside our list of number
if not i == lengh-1: # at this line we check if our number is not the last number in list , because in next line we check our number with the number that comes after our current number and if it's the last number we get "IndexError: list index out of range" error at next line
if l[i] > l[i+1]: # since our range is between 3 to 90 , so if our current number is bigger than next number, for sure it is bigger than 3, so it is between 3 to 90 and we can add it to our current group of number
temp.append(l[i])
else: #if it is not bigger than the next number it is our last number in our current group of number in range of 90 to 3 so we add it to our temp
temp.append(l[i])
group +=1
splited_list.update({str(group):temp})
temp = []
else: # when we reach this line it means that we get to the last number in ourlist , since there is no next number , we check it with previous number , if its bigger it is not belong to current group of number between 3 to 90 and if it's smaller it is belong to the current group of number
if l[i] < l[-2]:
temp.append(l[i])
group +=1
splited_list.update({str(group):temp})
break
else:
group +=1
splited_list.update({str(group):[l[i]]})
break
```

it separate range 90 to 3 as you wanted ,it gives this output:

```
>>> splited_list
{'2': [90, 76, 54, 34, 15, 8, 4], '1': [88, 77, 50, 20, 5], '4': [65], '3': [81, 74, 62, 51, 49, 30, 22, 10, 8]}
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**

Latest added