繁体   English   中英

列表理解,但在基于条件选择迭代的列表上

[英]List Comprehension but on list selected for iteration based on condition

我有两个列表list1list2为:

list1 = [4, 3, 20, 10]
list2 = ['a', 'f', 'd', 'b']

我想创建一个新的列表result ,条件是如果我的条件num==10True ,那么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]

在您当前的版本中, list1bnum == 10c ,但是您的else list2在语法上是无效的。

您需要明确您的条件表达式是b所有部分,您可以使用括号。

如果您只想根据条件num==10创建新的列表result ,您可以简单地执行(不需要列表推导)

>>> result = (list2, list1)[num==10]
>>> result
[4, 3, 20, 10]

上面的结果是基于Python将布尔值TrueFalse分别视为10这一事实。 因此,我们根据条件从元组中获取所需的列表。

执行相同任务的其他替代方法

# 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM