2016-05-19 5 views
1

Ich bin so neu in der Programmiersprache, bitte helfen Sie mir bitte mit diesem Problem auf Python.Unterscheide ich mich von der Vereinigungsmenge, aus welcher Originalmenge es kommt?

habe ich Excel-Daten wie folgt aus:

data1=[[161.0, 48.0], [160.0, 96.0], [163.0, 61.0], [160.0, 115.0], [173.0, 105.0]] 

data2=[[180.0, 91.0], [180.0, 80.0], [174.0, 94.0], [170.0, 101.0], [172.0, 78.0]] 

Angenommen, ich will nur um die X-Punkt der jeweiligen Daten sorgen, so dass ich diese:

unique_X1=[160, 161, 163, 173] 

unique_X2=[170, 172, 174, 180] 

Dann habe ich das machen könnte Vereinigung als Set X:

set([160, 161, 163, 170, **172**, **173**, 174, 180]) 

Also, was ich habe jetzt zu tun ist, eine Reihe von „Schnittpunkte“ zu machen, wenn das i und i + 1 aus Vereinigungsmenge ist aus verschiedenen Datensätzen kommen (unique_X1 oder unique_X2). Und der Wert des Schnittpunkts ist (i + [i + 1])/2

Zum Beispiel kommt 172 von unique_X2 und 173 von unique_X1, also ist der Schnittpunkt (172 + 173)/2 = 172.5

Hier ist, was ich bisher getan habe, würde mich wirklich freuen, wenn einige mir für den Rest helfen können. Ich glaube, ich muss Schleife verwenden, aber ich weiß nur nicht wie. Vielen Dank im Voraus

import xlrd 

#getting data 
book = xlrd.open_workbook('sampledata1.xlsx') 
sheet1 = book.sheet_by_name('Female') 
sheet2 = book.sheet_by_name('Male') 
data1 = [[sheet1.cell_value(r, c) for c in range(sheet1.ncols)] for r in range(sheet1.nrows)] 
data2 = [[sheet2.cell_value(r, c) for c in range(sheet2.ncols)] for r in range(sheet2.nrows)] 
print data1 
print data2 

X1=[int(i[0]) for i in data1] 
X2=[int(i[0]) for i in data2] 
# print X1 
# print X2 

#collecting same points 
def unique(X1): 
    return list(set(X1)) 
# print unique(X1) 

def unique(X2): 
    return list(set(X2)) 
# print unique(X2) 

#sorting data 
sort_unique_X1 = sorted(unique(X1)) 
sort_unique_X2 = sorted(unique(X2)) 
print sort_unique_X1 
print sort_unique_X2 

#union X1 and X2 
X=set(unique(X1)).union(unique(X2)) 
print X 


#generating cut points 
# cut_X = [] 

Antwort

0

Try this:

cut_X = [] 
for i,j in zip(X,X[1:]): 
    if i in unique_X1 and j in unique_X2: 
     cut_X.append(0.5*(i+j)) 
    elif i in unique_X2 and j in unique_X1: 
     cut_X.append(0.5*(i+j)) 

für die aktuellen Zahlen print cut_X sollte für die Hilfe ... aber der Schnitt Punkt zwischen einem Datum und anderen [166.5, 172.5, 173.5]

+0

Vielen Dank produzieren Daten sind nicht notwendigerweise +0,5, zum Beispiel für die Daten 170 und 172 ist der Schnittpunkt 171: D –

+0

Ah! Einverstanden :) Bitte akzeptieren Sie es als eine Antwort, wenn es Ihr Problem gelöst hat :) –

+0

Nur festgestellt, es gab einen Fehler im Code und ich habe es ein bisschen geändert ... –