Quantcast
Channel: How do I sort a list with positives coming before negatives with values sorted respectively? - Stack Overflow
Viewing all articles
Browse latest Browse all 12

Answer by John Smith for How do I sort a list with positives coming before negatives with values sorted respectively?

$
0
0

Just comparing the different ways.

Results:

> Shuffle cost comparison smallshuffle_lst: 0.001181483967229724shuffle_ar: 0.014688121969811618> Shuffle cost comparison mediumshuffle_lst: 0.572294642101042shuffle_ar: 0.3266364939045161> Shuffle cost comparison largeshuffle_lst: 26.5786890439922shuffle_ar: 6.284286553971469+cost               -costbisectme:    0.004252934013493359    0.003071450046263635lexicon:     0.010936842067167163    0.009755358099937439compreh.:    0.0071560649666935205   0.005974580999463797arrayme:     0.03787591797299683     0.023187796003185213nplexicon:   0.022204622975550592    0.007516501005738974npbisect:    0.023507782025262713    0.008819660055451095+cost               -costbisectme:    7.716002315981314   7.143707673880272lexicon:     22.17862514301669   21.606330500915647compreh.:    8.690494343056343   8.118199700955302arrayme:     1.5029839979251847      1.1763475040206686nplexicon:   2.0811527019832283      1.7545162080787122npbisect:    1.3076487149810418      0.9810122210765257+cost               -costbisectme:    180.77819497592282      154.19950593193062arrayme:     22.476932613993995      16.192646060022525nplexicon:   41.74795828794595   35.46367173397448npbisect:    20.13856932707131   13.85428277309984

Code:

import sysimport numpy as npfrom timeit import timeitfrom bisect import bisectfrom random import shuffledef shuffle_lst():    np.random.shuffle(lst)def shuffle_ar():    np.random.shuffle(ar)def bisectme():    np.random.shuffle(lst)    lst.sort()    i = bisect(lst, 0)    return lst[i:] + lst[:i]def lexicon():    np.random.shuffle(lst)    return sorted(lst, key=lambda x: (x < 0, x))def comprehension():    np.random.shuffle(lst)    return sorted([i for i in lst if i > 0]) + sorted([i for i in lst if i < 0])def arrayme():    np.random.shuffle(ar)    return np.concatenate([np.sort(ar[ar >= 0]), np.sort(ar[ar < 0])], axis=0)def nplexicon():    np.random.shuffle(ar)    return ar[np.lexsort((ar, ar < 0))]def numpybisect():    np.random.shuffle(ar)    ar.sort()    i = ar.__abs__().argmin()    return np.concatenate((ar[i:], ar[:i]))nloops = 1000lst = list(range(-10**1, 0, 1)) + list(range(10**1, -1, -1))ar = np.array(lst)print("> Shuffle cost comparison small")cost_shuffle_list_small = timeit(shuffle_lst, number=nloops)print("shuffle_lst:", cost_shuffle_list_small)cost_shuffle_array_small = timeit(shuffle_ar, number=nloops)print("shuffle_ar:", cost_shuffle_array_small)lst = list(range(-10**4, 0, 1)) + list(range(10**4, -1, -1))ar = np.array(lst)print("> Shuffle cost comparison medium")cost_shuffle_list_medium = timeit(shuffle_lst, number=nloops)print("shuffle_lst:", cost_shuffle_list_medium)cost_shuffle_array_medium = timeit(shuffle_ar, number=nloops)print("shuffle_ar:", cost_shuffle_array_medium)nloops = 100lst = list(range(-10**6, 0, 1)) + list(range(10**6, -1, -1))ar = np.array(lst)print("> Shuffle cost comparison large")cost_shuffle_list_large = timeit(shuffle_lst, number=nloops)print("shuffle_lst:", cost_shuffle_list_large)cost_shuffle_array_large = timeit(shuffle_ar, number=nloops)print("shuffle_ar:", cost_shuffle_array_large)print()nloops = 1000## With small lists/arrayslst = list(range(-10**1, 0, 1)) + list(range(10**1, -1, -1))ar = np.array(lst)print("\t\t\t\t\tw/o pen.\t\t\t\tw. pen.")foo = timeit(bisectme, number=nloops)print("bisectme:\t", foo, "\t", foo - cost_shuffle_list_small)foo = timeit(lexicon, number=nloops)print("lexicon:\t", foo, "\t", foo - cost_shuffle_list_small)foo = timeit(comprehension, number=nloops)print("compreh.:\t", foo, "\t", foo - cost_shuffle_list_small)foo = timeit(arrayme, number=nloops)print("arrayme:\t", foo, "\t", foo - cost_shuffle_array_small)foo = timeit(nplexicon, number=nloops)print("nplexicon:\t", foo, "\t", foo - cost_shuffle_array_small)foo = timeit(numpybisect, number=nloops)print("npbisect:\t", foo, "\t",  foo - cost_shuffle_array_small)print()## With medium lists/arrayslst = list(range(-10**4, 0, 1)) + list(range(10**4, -1, -1))ar = np.array(lst)print("\t\t\t\t\tw/o cost\t\t\t\tw. cost")foo = timeit(bisectme, number=nloops)print("bisectme:\t", foo, "\t", foo - cost_shuffle_list_medium)foo = timeit(lexicon, number=nloops)print("lexicon:\t", foo, "\t", foo - cost_shuffle_list_medium)foo = timeit(comprehension, number=nloops)print("compreh.:\t", foo, "\t", foo - cost_shuffle_list_medium)foo = timeit(arrayme, number=nloops)print("arrayme:\t", foo, "\t", foo - cost_shuffle_array_medium)foo = timeit(nplexicon, number=nloops)print("nplexicon:\t", foo, "\t", foo - cost_shuffle_array_medium)foo = timeit(numpybisect, number=nloops)print("npbisect:\t", foo, "\t",  foo - cost_shuffle_array_medium)print()## With large lists/arraysnloops = 100lst = list(range(-10**6, 0, 1)) + list(range(10**6, -1, -1))ar = np.array(lst)print("\t\t\t\t\tw/o cost\t\t\t\tw. cost")foo = timeit(bisectme, number=nloops)print("bisectme:\t", foo, "\t", foo - cost_shuffle_list_large)foo = timeit(arrayme, number=nloops)print("arrayme:\t", foo, "\t", foo - cost_shuffle_array_large)foo = timeit(nplexicon, number=nloops)print("nplexicon:\t", foo, "\t", foo - cost_shuffle_array_large)foo = timeit(numpybisect, number=nloops)print("npbisect:\t", foo, "\t",  foo - cost_shuffle_array_large)print()

Viewing all articles
Browse latest Browse all 12

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>