[英]List Comprehension but on list selected for iteration based on condition
我有两个列表list1
和list2
为:
list1 = [4, 3, 20, 10]
list2 = ['a', 'f', 'd', 'b']
我想创建一个新的列表result
,条件是如果我的条件num==10
为True
,那么result
应该是从list1
保存内容,否则它应该保存list2
的内容。 以下是我尝试过的代码:
num = 10
result = [element for element in list1 if num == 10 else list2]
但这会引发SyntaxError
。 我该怎么做到这一点?
上述代码的预期输出为:
[4, 3, 20, 10] # stored in `result`
你只是遗漏了一些括号:
result = [element for element in (list1 if num == 10 else list2)]
列表comp_if
可以具有过滤条件( 语言参考中的 comp_if
),如下所示:
[a for a in b if c]
在您当前的版本中, list1
是b
而num == 10
是c
,但是您的else list2
在语法上是无效的。
您需要明确您的条件表达式是b
所有部分,您可以使用括号。
如果您只想根据条件num==10
创建新的列表result
,您可以简单地执行(不需要列表推导) :
>>> result = (list2, list1)[num==10]
>>> result
[4, 3, 20, 10]
上面的结果是基于Python将布尔值True
和False
分别视为1
和0
这一事实。 因此,我们根据条件从元组中获取所需的列表。
执行相同任务的其他替代方法 :
# Alternative 1: Using your `if`/`else` logic
result = (list1 if num == 10 else list2)
# Alternative 2: using `and`/`or` logic
result = (num == 10 and list1) or list2
如果必须使用列表理解 (可能是对元素执行某些操作),那么您可以将列表理解与上述任何条件一起使用:
>>> num = 10
>>> list1 = [4, 3, 20, 10]
>>> list2 = ['a', 'f', 'd', 'b']
# Using tuple of lists with boolean index
>>> result = [element for element in (list2, list1)[num==10]]
>>> result
[4, 3, 20, 10]
# Using `if`/`else` logic
>>> result = [element for element in (list1 if num == 10 else list2)]
>>> result
[4, 3, 20, 10]
# Using using `and`/`or` logic
>>> result = [element for element in (num == 10 and list1) or list2]
>>> result
[4, 3, 20, 10]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.