# Question about syntax of algorithm

I’ve seen this type of algorithm a lot recently:

``````return all(i in range(1000) and abs(i - j) >= 10 for i in li for j in li if i != j) and len(set(li)) == 100
``````

It writes return first and begins the for…in loop halfway through.
I’ve this alot and it seems to be preferable. Why? Is is quicker? Cleaner?

It’s called a “comprehension”.

I’d recommend staying away from complicated ones like this.

A more readable and reusable approach might be something like this.

Create some filters using anonymous functions

``````len_100_filter = lambda x: len(x) == 100
contains_55 = lambda x:  55 in x
``````

Filter lists using comprehension

``````list1 = list(range(100))
list2 = list(range(101))
list3 = list(range(101))
list4 = list(range(99))
list2.pop(99)
list3.pop(55)

dict_of_lists = {"list1": list1, "list2":  list2, "list3":  list3, "list4": list4}
filtered_dict_of_lists = [label for label, list in dict_of_lists.items() if (len_100_filter(list) and contains_55(list))]

print(filtered_dict_of_lists)

# Output:
# ['list1', 'list2']
``````

You could even have a utility file where you import filters you want to use if they get complicated and come up again and again.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.