【问题标题】:How to use value after checking if exists in a list using 'any' command python使用\'any\'命令python检查列表中是否存在后如何使用值
【发布时间】:2022-11-23 23:12:11
【问题描述】:

我正在尝试检查输入的值是否在值列表中,如果在 if 语句中使用 any 命令,则使用它。但出于某种原因,当命令完成列表迭代时,它不会让我使用这个值。
有人可以在哪里更改我的代码以使其工作吗? 我想最后打印key
这是提到的 if 语句:

if any(SHA3_256.new(key.export_key()).hexdigest() == hashed_pk for key in publicKeys):
                print(key)

代码参数:

  • publicKeys 是一个字符串列表:
    ["key1", "key2"]...
  • hashed_ok 是输入的字符串:"0c22352b43d1696ac069a15a3561c9fc4c731e4e458edb7f648544b779f341dd"

【问题讨论】:

  • 尝试将“for”循环置于“if”条件之外。

标签: python


【解决方案1】:
for key in publicKeys:
    if SHA3_256.new(key.export_key()).hexdigest() == hashed_pk:
        print(key)
        # Use `break` here if you want

【讨论】:

    【解决方案2】:

    变量只存在于它们被定义的范围内。在这种情况下,您仅在该列表理解的范围内定义 any,该列表理解在您的 print(key) 语句之前关闭。

    我个人的观点是,那种 pythonic 的单行列表理解对于琐碎的简单情况非常有用,但是当你试图做多件事时解析起来很烦人。我只会使用 for key in publicKeys: 语法,并在该块中包含您的检查和打印语句。

    【讨论】:

      【解决方案3】:

      使用any代替next,它检索在生成器中有效的第一个值,并将保护表达式用作过滤器子句,这样:

      key = next((key for key in publicKeys if SHA3_256.new(key.export_key()).hexdigest() == hashed_pk), "Key not found")
      print(key)
      

      【讨论】:

        【解决方案4】:

        如果您仍想将其保留为单行,则可以为此使用新的 := 分配。一个例子是

        lst = [1, 2, 3]
        if any((key := k) == 2 for k in lst):
            print(key)
        

        所以在你的情况下

        if any(SHA3_256.new((key := k).export_key()).hexdigest()) == hashed_pk for k in publicKeys):
            print(key)
        

        【讨论】:

          【解决方案5】:

          这可能不是最优雅的做法,但在 Python 3.8+ 中,您可以使用 walrus operator (:=) :

          if any(SHA3_256.new((correct_key:=key).export_key()).hexdigest() == hashed_pk for key in publicKeys):
              print(correct_key)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-07
            • 2021-06-01
            • 1970-01-01
            • 2020-07-19
            • 2019-06-10
            • 2021-09-21
            相关资源
            最近更新 更多