Python 使用lambda或list compression创建带循环的列表

Python 使用lambda或list compression创建带循环的列表,python,python-3.6,Python,Python 3.6,对于下面的代码,我如何使用lambda函数或python列表理解将代码写入一行 def f(): lst=[] for i in range(1, 101): if i < 50: lst.append('A') else: lst.append('B') return lst def(): lst=[] 对于范围(1101)内的i: 如果i

对于下面的代码,我如何使用lambda函数或python列表理解将代码写入一行

def f():
    lst=[]
    for i in range(1, 101):
        if i < 50:
            lst.append('A')
        else:
            lst.append('B')
    return lst
def():
lst=[]
对于范围(1101)内的i:
如果i<50:
lst.append('A')
其他:
lst.append('B')
返回lst

请注意,您的函数输出49
'A'
s和51
'B'
s。我不确定这是否是故意的

获得50/50的最简单方法是:

['A'] * 50 + ['B'] * 50
如果要定义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']
作为一个班轮:

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


这些理解使用的事实是
False
0
True
1
,并且
'AB'[0]
'A'
,而'AB'[1]
'B'.

注意,您的函数输出49
'A'
s和51
'B'
s。我不确定这是否是故意的

获得50/50的最简单方法是:

['A'] * 50 + ['B'] * 50
如果要定义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']
作为一个班轮:

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


这些理解使用的事实是
False
0
True
1
,并且
'AB'[0]
'A'
,'AB'[1]
'B'.

在列表理解中可以使用三元条件:

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

您可以在列表中使用三元条件:

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

镜像您的代码如下:

def f():
    return ['A' if i < 50 else 'B' for i in range(1,101)]
def():
返回['A'如果i<50,则返回'B'(1101)]

镜像您的代码如下:

def f():
    return ['A' if i < 50 else 'B' for i in range(1,101)]
def():
返回['A'如果i<50,则返回'B'(1101)]

这个成语
'AB'[x>50]
非常隐晦,现在有条件表达式存在,这些可能是首选的。@juanpa.arrivillaga:我可能在:D上花了太多时间。无论如何,我添加了一些解释,就简单性而言,我敢说
['A']*50+['B']*50
很难打败(还有一个额外的好处,就是很难一个错误就隐藏一个错误)。据我所知,这是在引入条件表达式之前在Python中复制“三元运算符”的习惯用法。你可以在许多旧Python代码库中看到它。这个习惯用法
'AB'[x>50]
非常神秘,现在有条件表达式存在,这些可能是首选的。@juanpa.arrivillaga:我可能在:D上花了太多时间。无论如何,我添加了一些解释,就简单性而言,我敢说
['A']*50+['B']*50
很难打败(还有一个额外的好处,就是很难一次隐藏一个off-by-one错误)。据我所知,这是在引入条件表达式之前在Python中复制“三元运算符”的习惯用法。您可以在许多旧Python代码库中看到它。