i'm trying create algo compute several counts before, after , between points in ordered list. here "certain points" y values need appended x values , ordered. here simpler illustration of i'm trying do.
x = [2,3,5,6,7,9] y = [1,4,10] # appending y x , ordering gives us: full_list = [1,2,3,4,5,6,7,9,10] so y = 1 metrics computed non-programmatically slicing full_list so:
num_between_before = len(full_list[0:0]) 0 num_between_after = len(full_list[0:4]) 2 num_before = len(full_list[0:0]) 0 num_after = len(full_list[0:9]) 8 but of course i'm trying programmatically list x numeric , list y numeric. both x , y can of size len(y) < len(x). full ordered list can have y values distributed anywhere among x values.
programmatically output might this:
# y_val: (num_between_before, num_between_after, num_before, num_after) output: 1: (0, 2, 0, 8) 4: (2, 4, 3, 5) 10: (4, 0, 8, 0) obviously i'm having trouble here in code far:
x = [1434684599341,1434684606154,1434684607190,1434684613843,1434684677605, 1434684704358,1434684708727,1434684724495,1434684758413,1434684782632] y = [1434471725039, 1434684613844, 1434684708728, 1434684782633] y.sort() in y: x.append(i) x.sort() idx = [] j in y: idx.append(x.index(j)) counter = 0 i, k in zip(idx, y): counter += 1 if == 0: before = len(x[i:i]) after = len(x[i:conv_index[counter]]) - 1 print before, after elif == idx[-1]: before = len(x[i-counter:idx[counter-1]]) - 1 after = len(x[i:i]) print before, after else: before = len(x[i:idx[counter]]) after = len(x[i:idx[counter]]) - 1 print before, after
if follow you, think works:
def allcounts(x,y): z = x+y z.sort() d = {} in y: d[i] = z.index(i) counts = {} i,j in enumerate(y): if == 0: counts[j] = (0,d[y[i+1]]-d[j]-1,d[j],len(z)-d[j]-1) elif < len(y) - 1: counts[j] = (d[j]-d[y[i-1]]-1,d[y[i+1]]-d[j]-1,d[j],len(z)-d[j]-1) else: counts[j] = (d[j]-d[y[i-1]]-1,0,d[j],len(z)-d[j]-1) return counts with test data:
>>> x = [2,3,5,6,7,9] >>> y = [1,4,10] >>> c = allcounts(x,y) >>> c {1: (0, 2, 0, 8), 10: (4, 0, 8, 0), 4: (2, 4, 3, 5)}
Comments
Post a Comment