jacobcan118
jacobcan118

Reputation: 9037

using lambda or list comprehesion to create list with loop

for the following code, how I can write into one line using lambda function or using python list comprehension?

def f():
    lst=[]
    for i in range(1, 101):
        if i < 50:
            lst.append('A')
        else:
            lst.append('B')
    return lst

Upvotes: 1

Views: 85

Answers (3)

Eric Duminil
Eric Duminil

Reputation: 54213

Note that your function outputs 49 'A's and 51 'B's. I'm not sure if that's intentional.

The easiest way to get 50/50 would be :

['A'] * 50 + ['B'] * 50

If you want to define a lambda:

>>> a_or_b = lambda x: 'AB'[x>50]
>>> [a_or_b(x) for x in range(1,101)]
['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B']

As a one-liner :

['AB'[x>50] for x in range(1,101)]

or

['AB'[x>=50] for x in range(100)]

Those comprehensions use the fact that False is 0 and True is 1, and that 'AB'[0] is 'A' and 'AB'[1]is'B'`.

Upvotes: 3

JoshKopen
JoshKopen

Reputation: 960

The code, mirroring yours, would be like this:

def f():
    return ['A' if i < 50 else 'B' for i in range(1,101)]

Upvotes: 1

Moses Koledoye
Moses Koledoye

Reputation: 78536

You can use a ternary conditional in a list comprehension:

lst = ['A' if i < 50 else 'B' for i in range(1, 101)]

Upvotes: 3

Related Questions