【问题标题】:One liner for True or False for loop in PythonPython中的True或False for循环的一种衬里
【发布时间】:2021-10-07 17:29:55
【问题描述】:

几乎每次我解决 Codewars 练习并浏览其他解决方案时,我都会看到有些人用 2 或 3 行代码完成了我的 15 行代码。所以,我已经开始学习列表和集合理解,并会尝试其他技巧。现在我的问题是关于这段代码:

    for i in range (0, 3):
        if not text [i].isdecimal ():
            return False 

可以写成一行吗?

【问题讨论】:

  • 是的,有可能。你试过什么?
  • @buran 我试过[text[i].isdecimal () for i in range (0, 3)][True for i in text[i].isdecimal () for i in range (0, 3) else False]的变体

标签: python list-comprehension one-liner


【解决方案1】:

使用all:

return all(text[i].isdecimal() for i in range(0,3))

all 遍历您的列表/生成器/元组/等。并评估每个项目是真还是假。它在第一次评估False 时退出并返回Falseany 与此类似,但它会检查所有内容以至少进行一次真实的评估。

(我假设您的原始代码是正确的,并且您只对text 的前三个元素感兴趣,并且您希望从您所在的任何函数中返回该值。)

【讨论】:

    【解决方案2】:

    你有一个像这样的更复杂的循环:

     for i in range(10):
        if i<5:
            j = i**2
        else:
            j = 0    
        print(j) ```
    

    您可以将其压缩为一行。查看以下代码 sn -p:

    for i in range(10): print(i**2 if i&lt;5 else 0)

    【讨论】:

    • 如果我在这里的 cmets 有错误,请纠正我,不知道如何给出确切的答案,但这应该会有所帮助。 :)
    • 你可以......但你不能做像x = for i in range(10): i**2 if i&lt;5 else 0这样的事情。在 OP 中,他正在寻找一些他可以在其他地方消费的价值。
    猜你喜欢
    • 2021-11-22
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多