简体   繁体   中英

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

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM