Issue
I have a list like this
list = [[1, 2, 3, 4], [1, 9, 12], [9], [8], [7, 8, 9, 10, 12, 16], [7, 8, 9, 10], [4, 5, 6, 7], [6, 7, 8, 9, 10, 11]]
I need to find the k-th
largest sublist by length of the list from the above-nested list, a small twist is there:
If K =2 the answer should be [4,5,6,7] as it comes later in the processing
If K = 1 the answer should be [6, 7, 8, 9, 10, 11] as it comes later in the processing
I initially sorted the nested sublist by length, which I think will be useful to find kth largest sublist, as it also preserves the order for list in which they were processed earlier
sorted_list = [[9], [8], [1, 9, 12], [1, 2, 3, 4], [7, 8, 9, 10], [4, 5, 6, 7], [7, 8, 9, 10, 12, 16], [6, 7, 8, 9, 10, 11]]
Not able to identify the correct way to find the kth largest element from here,
returning sorted_list[-K]
will not work in most of the cases where the last two sublists are of same length.
Don't confuse lists elements with sorting, sorting is done on the basis of the length of sub-lists and order is preserved in sorted_list
Solution
You can do this with Python's itertools.groupby
applied to your sorted list: then accessing index -k
of the grouped list gives you all lists of the kth largest length, of which you wanted the last one:
import itertools
nums = [[1, 2, 3, 4], [1, 9, 12], [9], [8], [7, 8, 9, 10, 12, 16], [7, 8, 9, 10], [4, 5, 6, 7], [6, 7, 8, 9, 10, 11]]
sorted_list = sorted(nums, key=len)
grouped_list = [list(g) for k, g in itertools.groupby(sorted_list, len)]
def kth_largest(k: int):
return grouped_list[-k][-1]
print(kth_largest(k=2))
print(kth_largest(k=1))
gives:
[4, 5, 6, 7]
[6, 7, 8, 9, 10, 11]
Answered By - kcsquared
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.