Python Random Fact: use any() to check existence in a list

Issue

Can you find an issue in the following Python code?

if target in [el.value for el in some_list]:
  return True

Avoid creating a copy

This code creates a temporary list, so it consumes O(N) memory where N is the size of some_list.

[el.value for el in some_list]

You can avoid this by using any.

if any(el.value == target for el in some_list):
  return True

But why does any not create a copy?

Because any consumes a generator expression.

el.value == target for el in some_list

This expression creates an iterator, not a list. A generator yields one item at a time as it is needed, so it does not build an intermediate list in memory. It also short-circuits: as soon as it finds a match, it stops iterating.

Please check for more details;

Conclusion

Use any to check conditions like "does any item match this value?" without creating a temporary list. This keeps memory usage low and lets the check short-circuit as soon as a match is found.