Multiple if statements list comprehension

python list comprehension multiple if else
list comprehension python 3 if
elif in list comprehension
nested list comprehension python
python list comprehension two lists
python list comprehension multiple variables
using if and else in list comprehension
python list comprehension multiple values

Good evening,

I'm trying to get better at list comprehension since I discovered this fantastic form of coding a few days ago. Currently I'm trying to do a list comprehension with multiple if statements. This is the code I'm trying to rewrite (for your understanding)

for i in range(len(keys)):
    key = keys[i]

    if key == 1:
        newAns = [1, 0, 0, 0]
        answers.append(newAns)
    elif key == 2:
        newAns = [0, 1, 0, 0]
        answers.append(newAns)
    elif key == 3:
        newAns = [0, 0, 1, 0]
        answers.append(newAns)
    else:
        newAns = [0, 0, 0, 1]
        answers.append(newAns)

And this is what i have done so far

    answers = [i for i in keys]:
    [answers.append([1, 0, 0, 0]) if i == 1]
    [answers.append([0, 1, 0, 0]) if i == 2]
    [answers.append([0, 0, 1, 0]) if i == 3]
    [answers.append([0, 0, 0, 1]) if i == 1]

The list contains values of ints and i would like to convert them to vectors depending on what value the key has.

I'm a bit stuck and would appreciate some guidance in how to approach this task. Thank you.

How about we put all the key and newAns in a dict and use them in your list comprehension?

answer_map = {1: [1, 0, 0, 0], 2: [0, 1, 0, 0], 3: ...}
answers = [answer_map[x] if x in answer_map else [0, 0, 0, 1] for x in keys]

Update:

I totally forgot about dict.get(key, default) (Thanks, @U9-Forward!). You could also say:

[answer_map.get(x, [0, 0, 0, 1]) for x in keys]

Multiple IF conditions in a python list comprehension, How about ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n​)]. For example, if n = 30 this is [1, 2, 3, 'four', 5, 'six', 7, 'four',  Python tutorial on list comprehensions with multiple if statements explained. Learn how to use multiple if statements within a list comprehension, double ifs, and how the conditional logic works.

Additional to @UltrInstinct's answer, do get to make no if statements:

answer_map = {1: [1, 0, 0, 0], 2: [0, 1, 0, 0], 3: ...}
answers = [answer_map,get(x,[0, 0, 0, 1]) for x in keys]

Now:

print(answers)

Is as desired.

List Comprehensions in Python 3 for Beginners - The Startup, Now for the really fun part… multiple if and else statements in a single list comprehension. Yes, we actually can do that too! This is conceptually a  You can put you logic in a separate function, and then have the elegance of the list comprehension along with the readability of the function: def cond(i): if i % 4 == 0: return 'four' elif i % 6 == 0: return 'six' return i l=[cond(i) for i in range(1,n)]

You could use nested ternary expressions if you want an absurd one-liner.

In [4]: keys = [2, 1, 1, 3, 0, 2]

In [5]: result  = [
   ...:     [1,0,0,0] if key == 1 else
   ...:     [0,1,0,0] if key == 2 else
   ...:     [0,0,1,0] if key == 3 else
   ...:     [0,0,0,1]
   ...:     for key in keys
   ...: ]

In [6]: result
Out[6]:
[[0, 1, 0, 0],
 [1, 0, 0, 0],
 [1, 0, 0, 0],
 [0, 0, 1, 0],
 [0, 0, 0, 1],
 [0, 1, 0, 0]]

However, it is better to wrap your logic in a function and call that function in the list comprehension:

In [7]: def f(key):
   ...:     if key == 1:
   ...:         result = [1, 0, 0, 0]
   ...:     elif key == 2:
   ...:         result = [0, 1, 0, 0]
   ...:     elif key == 3:
   ...:         result = [0, 0, 1, 0]
   ...:     else:
   ...:         result = [0, 0, 0, 1]
   ...:     return result
   ...:

In [8]: [f(key) for key in keys]
Out[8]:
[[0, 1, 0, 0],
 [1, 0, 0, 0],
 [1, 0, 0, 0],
 [0, 0, 1, 0],
 [0, 0, 0, 1],
 [0, 1, 0, 0]]

In this case, a dict works very nicely as well, as demonstrated in other answers. In general, don't try to cram a bunch of things into a single list-comprehension.

Python List Comprehension (Syntax & Examples), Along with this, we will study conditionals and nested list comprehension in Python Inside those, we use a for-statement on an iterable (a list, here). Remember when we learned about python lambda expressions in an earlier lesson? Either way, the important point is that the value statement in a list comprehension has to be a single value. You can't insert multiple items all at once. You can't insert multiple items all at once. (If that's what you're trying to do, skip to the 2nd example.)

As a fan of comprehensions your can use a nested comprehension one liner if

[ [ 1 if i == min(k, 4) else 0 for i in range(1, 5)]  for k in keys]

A two-liner with a dictionary

 answer_dict = {1: [1, 0, 0, 0],
               2: [0, 1, 0, 0] ...}

would be a bit more efficient. Just for fun you can construct the dictionary using a nested dictionary comprehension, even though it does not be worth the efort it if you have just four answers.

answer_dict = { k: [ 1 if i == k else 0
                   for i in range(1, 5) for k in range(1, 5)]
              }
[answer_dict[min(4, k)] for k in keys]   

Instead of dictionary you can also use a list

answers = [ [ 1 if i == k else 0
                   for i in range(1, 5) for k in range(0, 5)]]

[answers[min(4, k)] for k in keys] 

List Comprehensions in Python 3, Conditional if statements can be used to control which items from an existing sequence are included in the creation of a new list. Nested Loops in  Conditional if statements can be used to control which items from an existing sequence are included in the creation of a new list. Nested Loops in a List Comprehension. Nested loops can be used to perform multiple iterations in our programs. This time, we’ll look at an existing nested for loop construction and work our way towards a list comprehension.

Understanding nested list comprehension syntax in Python, It is proposed to allow conditional construction of list literals using for and if clauses. They would nest in the same way for loops and if statements  List comprehensions are one of the really nice and powerful features of Python. It is actually a smart way to introduce new users to functional programming concepts (after all a list comprehension is just a combination of map and filter) and compact statements. However, one thing that always troubled me when using list comprehensions is their non intuitive syntax when nesting was needed.

List Comprehensions, If you read enough Python code, you'll eventually come across the terse and efficient List comprehensions are simply a way to compress a list-building for-​loop into a almost read-off the meaning of this statement in plain English: "​construct a list Sometimes you want to build a list not just from one value, but from two. Let’s create a list from a set using the list comprehension syntax. >>> myset= {3,1,2} >>> makelist=lambda i:list (i) >>> mylist=makelist (myset) >>> mylist. >>> myset={3,1,2} >>> makelist=lambda i:list(i) >>> mylist=makelist(myset) >>> mylist.

Python List Comprehension Tutorial, Lastly, you'll dive into nested list comprehensions to iterate multiple times over lists. If you're also interested in tackling list comprehensions together with can also pass a setup parameter which contains an import statement. List Comprehensions can use nested for loops. You can code any number of nested for loops within a list comprehension, and each for loop may have an optional associated if test. When doing so, the order of the for constructs is the same order as when writing a series of nested for statements. The general structure of list comprehensions looks

Comments
  • Wow! Did not even think of that! Thank you! :)