'How do I reduce multiple nested if statements in Python?
I'm working with a code snippet that iterates over an object list and filters out objects to perform a specific task. The for loop consists of multiple nested if statements (and I'll probably add more in the future).
Here's my code:
for obj in objects:
if 'x' not in obj.name:
if 'y' not in obj.name:
if 'z' not in obj.name:
if obj.length > 0:
if obj.is_directory == True:
# Do Something
Is there a neat or efficient workaround for this snippet?
Please Advise
Solution 1:[1]
You can also write:
for obj in objects:
if not any(c in obj.name for c in 'xyz') and obj.length > 0 and obj.is_directory:
# Do something
In case x, y and z are not single characters the solution remains the same. A string in Python is a sequence of characters, so you can substitute the 'xyz' string with the sequence (list) of words. You can put any iterable in there as well.
for obj in objects:
if not any(w in obj.name for w in [word1, word2, word3]) and obj.length > 0 and obj.is_directory:
# Do something
Solution 2:[2]
You can put them all into one if statement with and between each condition:
for obj in objects:
if ('x' no in obj.name) and ('y' not in obj.name) and ('z' not in obj.name)
and (obj.length > 0) and (obj.is_directory):
#Do Something
Note that it is not necessary to check if obj.is_directory == True, and it will evaluate to true itself if it is true.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Emi OB |
