【问题标题】:List comprehension within if statement [duplicate]if语句中的列表理解[重复]
【发布时间】:2019-11-03 10:39:49
【问题描述】:

目前,我正在努力了解列表理解,并尝试尽可能多地使用它来构建一个 blackkack 游戏。我被困在这个特定的点上:

   elif card == (char for char in ["K", "J", "Q"]):
        print("Detected facecard")

我知道使用字典或其他方法可能会更容易,甚至只是扩展循环,但我特别想了解为什么这不起作用。

printing char for char in .... 生成对象类型而不是对象。

有什么建议吗?提前致谢

【问题讨论】:

  • 为什么不只是elif card in ['K', 'J', 'Q']: ??
  • card 永远不会等于生成器。如果你真的想这样写,也许像if any(char == card for char in [...]):
  • 还有,listcomps要放轻松,过度使用是很正常的
  • 是的,我可以看到我会开始过度使用它们,这只是我想练习的东西,尤其是双循环。感谢大家的帮助

标签: python python-3.x if-statement list-comprehension


【解决方案1】:

(char for char in ["K", "J", "Q"]) 构造生成器:

<generator object <genexpr> at 0x7f97e9f8f200>

因此,您正在尝试将卡(我认为它不是生成器 :))与生成器进行比较。它总是False。您可以检查card 是否在["K", "J", "Q"] 中:

elif card in ['K', 'J', 'Q']:

【讨论】:

    【解决方案2】:

    vurmux 评论的是正确的方法,但这就是为什么你所做的不起作用:

    (char for char in ["K", "J", "Q"]) 是一个生成器,因此实际发生的情况是 python 将 card 与该生成器进行比较,这始终是错误的。

    >> x = (char for char in ["K", "Q", "J"])
    >> print(x)
    <generator object <genexpr> at 0x7f10752d4410>
    

    【讨论】:

    • 是的,我明白,只是不明白它为什么要生产发电机
    • 这就是语句周围的括号() 的作用。如果您改为使用[char for char in ["K", "Q", "J"]],它将重复生成列表["K", "Q", "J"]
    • 这就是我正在寻找的确切答案。非常感谢。
    猜你喜欢
    • 2023-03-13
    • 2019-12-14
    • 1970-01-01
    • 2020-11-15
    • 2020-05-14
    • 2017-08-27
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多