Python 使用lambda或list compression创建带循环的列表
对于下面的代码,我如何使用lambda函数或python列表理解将代码写入一行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
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代码库中看到它。