If I had two arrays of the form:
x = [0, 7, 2, 4, 6, 9, 5]
y = [1, 2, 3, 4, 5, 6, 7]
i.e., I have data points at [0,1]
, [3,2]
, [x_n,y_n]
etc. How would I organise y
for a corresonding ascending x
value? In other words I end up with ascending values of x
:
x = [0, 2, 4, 5, 6, 7, 9]
Matched to their corresponding y
values:
y = [1, 3, 4, 7, 5, 2, 6]
I'm guessing I would need to stitch the two arrays together then sort according to x
, but I'm not quite sure of the exact syntax for this. Any helps would be greatly appreciated.
Python List sort() - Sorts Ascending or Descending List. The list. sort() method sorts the elements of a list in ascending or descending order using the default < comparisons operator between items. Use the key parameter to pass the function name to be used for comparison instead of the default < operator.
The sort() method lets you sort a list in ascending or descending order. It takes two keyword-only arguments: key and reverse . reverse determines if the list is sorted in ascending or descending order.
I would use zip
with a lambda
:
In [55]: x = [0, 7, 2, 4, 6, 9, 5]
In [56]: y = [1, 2, 3, 4, 5, 6, 7]
In [57]: L = sorted(zip(x,y), key=operator.itemgetter(0))
In [58]: new_x, new_y = zip(*L)
In [59]: new_x
Out[59]: (0, 2, 4, 5, 6, 7, 9)
In [60]: new_y
Out[60]: (1, 3, 4, 7, 5, 2, 6)
Don't forget to import operator
You can sorted
them as tuples after you zip
them
>>> sorted((i,j) for i,j in zip(x,y))
[(0, 1), (2, 3), (4, 4), (5, 7), (6, 5), (7, 2), (9, 6)]
To iterate over these pairs, you could do something like
sorted_pairs = sorted((i,j) for i,j in zip(x,y))
for i,j in sorted_pairs:
# do something with each i and j value, which are x and y respectively
Or you can index directly like
sorted_pairs[0][0] # x of the first tuple
sorted_pairs[0][1] # y of the first tuple
sorted_pairs[3][0] # x of the fourth tuple... etc
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With