How do I do a certain function when at least one if statement is True?

Question:

I trying to delete a certain elements from a list when two elements are "together" in a specific order expressed in the if statements. However, if the conditions are met, they both do the same thing, so I was wondering if there is a way to not write the same code to execute in each statement, and only do it when an if statement is met.

arr = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
if arr[i] == "SOUTH" and arr[j] == "NORTH":
    del arr[i]
    del arr[j]
    length-=2
if arr[i] == "NORTH" and arr[j] == "SOUTH":
    del arr[i]
    del arr[j]
    length-=2
if arr[i] == "WEST" and arr[j] == "EAST":
    del arr[i]
    del arr[j]
if arr[i] == "EAST" and arr[j] == "WEST":
    del arr[i]
    del arr[j]
    length-=2
Asked By: juangalicia

||

Answers:

You could combine your if statements into a single if statement with or.

a = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
if (arr[i] == "SOUTH" and arr[j] == "NORTH") or (arr[i] == "NORTH" and arr[j] == "SOUTH") or 
    (arr[i] == "WEST" and arr[j] == "EAST") or (arr[i] == "EAST" and arr[j] == "WEST"):
    del arr[i]
    del arr[j]
    length-=2
Answered By: Dylan Ko

If my surmise is right, and you’re trying to reduce a set of moves, thien this will do it:

a = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
opposite = {"NORTH":"SOUTH","SOUTH":"NORTH","WEST":"EAST","EAST":"WEST"}
b = []
for word in a:
    if b and b[-1] == opposite[word]:
        b.pop()
    else:
        b.append(word)
print(b)

Output:

['WEST']
Answered By: Tim Roberts

You can combine the two values into a tuple, then search for that in a set of tuples.

opposites = {("NORTH", "SOUTH"), ("SOUTH", "NORTH"), ("EAST", "WEST"), ("WEST", "EAST")}
pair = (a[i], a[j])
if pair in opposites:
    del arr[i]
    del arr[j]
    length-=2
Answered By: Barmar
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.