Posts: 354
Threads: 13
Joined: Mar 2020
May-04-2020, 10:53 AM
(This post was last modified: May-04-2020, 10:53 AM by pyzyx3qwerty.)
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
Posts: 94
Threads: 0
Joined: Apr 2020
>>> 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)]
>>>
Posts: 2,031
Threads: 9
Joined: May 2017
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])
Posts: 354
Threads: 13
Joined: Mar 2020
@ 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)]
Posts: 2,164
Threads: 35
Joined: Sep 2016
- 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)]
Posts: 354
Threads: 13
Joined: Mar 2020
Thanks @ Yoriz. Not only do i get the same expected result, but it make my codes shorter
Posts: 354
Threads: 13
Joined: Mar 2020
(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?
Posts: 2,031
Threads: 9
Joined: May 2017
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.
|