当前位置: 首页 > 面试题库 >

python列表理解中的多个IF条件

梁祯
2023-03-14
问题内容

我想知道,是否可以将多个if条件放入列表理解中?我在文档中没有找到类似的东西。

我希望能够做这样的事情

ar=[]
for i in range(1,n):
  if i%4 == 0: ar.append('four')
  elif i%6 == 0: ar.append('six')
  else: ar.append(i)

使用列表理解。我该怎么做?

这有可能吗?如果不是,那么最优雅(pythonic)的方法是什么呢?


问题答案:

怎么样

ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n)]

例如,如果n = 30这是

[1, 2, 3, 'four', 5, 'six', 7, 'four', 9, 10, 11, 'four', 13, 14, 15, 'four', 17, 'six', 19, 'four', 21, 22, 23, 'four', 25, 26, 27, 'four', 29]

预计到达时间:这是您可以应用条件列表的方式:

CONDITIONS = [(lambda i: i % 4 == 0, "four"), (lambda i: i % 6 == 0, "six"),
              (lambda i: i % 7 == 0, "seven")]

def apply_conditions(i):
    for condition, replacement in CONDITIONS:
        if condition(i):
            return replacement
    return i

ar = map(apply_conditions, range(0, n))


 类似资料:
  • 问题内容: 我们都知道python的 句法。 但是,列表理解的 AST表示可以容纳多个’if’表达式: 有人可以给我一个python代码示例,该示例会生成带有多个“ if”表达式的AST吗? 问题答案: 只需将它们一个接一个地堆叠: 产生介于11和49之间(含)的整数。

  • 问题内容: 如何在Python中执行以下操作? 实质上: 用空字符串替换所有的None,然后 执行功能。 问题答案: 你可以完全做到这一点,这只是一个订购问题: 一般来说, 而且,if仅对于具有条件的列表理解而言, 请注意,这实际上使用了一种不同的语言构造,即条件表达式,它本身不是理解语法的一部分,而ifafter则for…in是列表理解的一部分,用于从可迭代的源中筛选元素。 条件表达式可用于各种

  • 问题内容: 可以将这段代码转换为列表理解吗? 我知道如何转换它的一部分: 但是我不知道如何添加中断,并且文档没有太大帮助。 任何帮助,将不胜感激。 问题答案: 分解一下: 将产生一个清单。您想要的是列表中的第一项。一种方法是使用下一个功能: Next返回迭代器的下一项。在像列表这样的可迭代的情况下,它最终采用了第一项。 但是没有理由真正构建列表,因此我们可以改用生成器表达式: 另外,请注意,如果生

  • 问题内容: 加入列表: join 必须采取迭代。 显然,join的论点是,这是一个列表理解。 看这个: 现在,join的参数为,但结果相同。 为什么?是否str还会产生列表或可迭代项? 问题答案: 这称为生成器表达式,并在PEP 289中进行了说明。 生成器表达式和列表理解之间的主要区别在于前者不在内存中创建列表。 请注意,还有第三种编写表达式的方法:

  • 问题内容: 是否可以在Python中定义递归列表理解? 可能是一个简单的示例,但类似于: 这样有可能吗? 问题答案: 不,没有(记录,可靠,稳定,… ;-)引用“当前理解”的方法。您可以只使用一个循环: 当然,这是非常昂贵的(O(N平方)),因此您可以使用辅助工具对其进行优化(我假设将项目的顺序与中的项目顺序保持一致,否则可以做到;-)。 ..: 对于非常长的列表(O(N)而不是N平方),这要快得

  • 问题内容: 可以说我有这个: 现在。如果bool1被评估为false,那么Java是否足够聪明来跳过检查bool2和bool2?Java甚至从左到右检查它们吗?我之所以这样问,是因为我在整理条件时将其内部条件“分类”(从左侧最便宜的条件开始)。现在我不确定这是否会给我带来任何性能上的好处,因为我不知道Java如何处理这个问题。 问题答案: 是的,Java(类似于其他主流语言)使用 惰性评估 短路,