Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Identifying locations of distinct sublists in Python

I have a list J1 containing many sublists. I am identifying all the distinct sublists and the locations (first and last) at which they occur. I present the current and expected output.

J1 = [[0, 3, 7, 9, 10], [0, 3, 7, 9, 10], [0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

distinct_sublists = []
sublist_indices = {} 
for i, sublist in enumerate(J1):
 if sublist not in distinct_sublists:
     distinct_sublists.append(sublist)
     sublist_indices[tuple(sublist)] = [i, i]
else:
    sublist_indices[tuple(sublist)][1] = i

num_distinct_sublists = len(distinct_sublists)

first_last_locations = [[indices[0], indices[1]] for indices in sublist_indices.values()]

print("Number of distinct sublists in J1:", num_distinct_sublists)
print("First and last locations of distinct sublists in J1:", first_last_locations)
print("Distinct sublists", distinct_sublists)

The current output is

Number of distinct sublists in J1: 3
First and last locations of distinct sublists in J1: [[0, 0], [3, 3], [5, 5]]
Distinct sublists [[0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

The expected output is

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Number of distinct sublists in J1: 3
First and last locations of distinct sublists in J1: [[0, 2], [3, 4], [5, 5]]
Distinct sublists [[0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

>Solution :

your code looks perfect except for the indentation, just indent the "else" statement:

for i, sublist in enumerate(J1):
    if sublist not in distinct_sublists:
        distinct_sublists.append(sublist)
        sublist_indices[tuple(sublist)] = [i, i]
    else:
        sublist_indices[tuple(sublist)][1] = i

For each sublist in J1 you want to check if the sublist has already been recorded: if so, update the first/last indices as [i,i], else (i.e. if it’s already been recorded) just update the last index as i.

In Python, indentation really matters, so depending on previous language experience that might be unexpected. Also, in Python, a for loop can have an else of its own:

for i in range(10):
   if i != 5:
      do_something()
   else:        # this else executes if the "if" statement condition is false
      do_something_else()
else:           # this else executes after the "for" loop is completed
   do_yet_another_thing()
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading