【问题标题】:Convert to set Comprehension转换为集合理解
【发布时间】:2021-01-18 14:56:36
【问题描述】:

我是 Python 新手,我试图将这个带有 if else 语句的循环转换为理解,但似乎无法破解它......

希望你们能帮助我吗?

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}
Boys = {'Tim': 18,'Charlie':12,'Robert':25}
Girls = {'Tiffany':22}
for key in list(Dict.keys()):
   if key in list(Boys.keys()):
       print(True)
   else:
       print(False)

我已经尝试了以下...

a = {key for key in list(Dict.keys()) if key in list(Boys.keys())}
b = {key if key in list(Boys.keys()) else False for key in list(Dict.keys())}
c = {key in list(Boys.keys()) if key else False for key in list(Dict.keys())}
print(c)

【问题讨论】:

  • 你为什么要使用set理解?你不是在创建一个集合,你只是在打印 true 或 false ...
  • 另外,停止使用list(Dict.keys()) 只是为了迭代它,这是没有意义的,因为Dict.keys() 是可迭代的。但实际上,您可以直接迭代 dict 对象,所以 for key in Dict:。但更重要的是 不要这样做 if key in list(Boys.keys()),同样,key in Boys.keys() 会起作用,但实际上,key in Boys 是你想要的,而是使用 list(Boys.keys())后两个通过快速、基于散列的恒定时间搜索击败了字典的目的,并演变为列表的线性时间搜索

标签: python if-statement dictionary-comprehension for-comprehension


【解决方案1】:

你想要的可以简化:

c = [key in Boys for key in Dict]
print(c)

输出:

[True, True, False, True]

这表明前两个和最后一个是男孩的名字。

您也不需要set(),因为集合只包含唯一值。当值为TrueFalse 时,一个集合只能包含0、1 或2 个值。

【讨论】:

    【解决方案2】:
    a = [ True if key in Boys else False  for key in Dict ] 
    

    应该做的伎俩,你只需要改变订单。

    输出:

    [True, True, False, True]
    

    【讨论】:

      【解决方案3】:

      你需要做两件事来完成它,

      1.更改顺序并删除不必要的 list() 和 keys()

      2。使用列表理解而不是字典理解

      Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}
      Boys = {'Tim': 18,'Charlie':12,'Robert':25}  
      a = [True if key in Boys.keys else False for key in Dict]
      print(a)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2014-11-02
        • 2013-12-16
        • 2013-09-19
        • 1970-01-01
        • 2018-12-26
        • 2015-09-24
        相关资源
        最近更新 更多