I have been taking a class, so this must count as homework. So thing is given a list of non-empty tuples, return a list sorted in increasing order by the last element in each tuple. e.g. [(1, 7), (1, 3), (3, 4, 5), (2, 2)] yields [(2, 2), (1, 3), (3, 4, 5), (1, 7)] Hint: use a custom key= function to extract the last element form each tuple.
Here's my go :
def sort_last(tuples):
for t in tuples :
last_element = t[-1]
return sorted(tuples, key = last)
Unfortunately, this is all i have been able to do. I don't know how can I sort the list on the basis of its last element in ascending order. Any help would be appreciated
>>> tup=[(1, 7), (1, 3), (3, 4, 5), (2, 2)]
>>> sorted(tup, key=lambda x:x[-1])
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
>>>
You can use the
itemgetter.
from operator import itemgetter
tup = [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
sorted(tup, key=itemgetter(-1))
The itemgetter could also used to access keys in a dict:
data = [{"x": 10, "y": 42},{"x": 20, "y": 44},{"x": 13, "y": -1}]
# sort by x
sorted(d, key=itemgetter("x"))
# sort by x and then y
sorted(d, key=itemgetter("x", "y"))
# sort by y and then x
sorted(d, key=itemgetter("y", "x"))
How it works:
my_itemgetter = itemgetter(1)
# the itemgetter returns a callable, which takes the sequence as input
my_itemgetter([1,2,3])
Output:
2
If you call it in one line, it looks a bit strange:
itemgetter(1)([1,2,3])
@
anbu23 and @
DeaD_EyE thanks for your replies.
Here's the code if anyone needs it in the future :
def sort_last(tuples):
for t in tuples :
last_element = t[-1]
return sorted(tup, key=lambda x:x[-1])
tup =[ (1, 7), (1, 3), (3, 4, 5), (2, 2)]
print(sort_last(tup))
And output :
Output:
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
- Lines 2 & 3 are not doing anything useful, they can be removed as line 4 does all the work.
- On line 4,
sorted
should be passed tuples
instead of using the global tup
.
Code becomes
def sort_last(tuples):
return sorted(tuples, key=lambda x: x[-1])
tup = [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
print(sort_last(tup))
Output:
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
Thanks @
Yoriz. Not only do i get the same expected result, but it make my codes shorter
(May-04-2020, 03:52 PM)Yoriz Wrote: [ -> ][*]On line 4, sorted
should be passed tuples
instead of using the global tup
.
But, if I may ask, what is this global
tup
you are talking about? And where can it be used?
tup
is just a name, which refers to the object [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
.
anbu23 named it tup
.
I guess he has chosen this name, because the inner elements are tuples.
Finding the right names is not always easy.