python - 测试多组成员资格的更好方法?

标签 python

我这里的代码很糟糕,有没有 pythonic 的方法来改进它?

我有三套:

set1 = {1,2,3}
set2 = {2,3,4}
set3 = {4,5,6}

和组合集

combined = set1 | set2 | set3

我需要一个字典来返回一个数字是否是每个集合。

例如

d[2] = {'set1':True, 'set2':True, 'set3':False}

我的代码是这样的:

def in_set(num):
    d = {}
    if num in set1:
        d['set1'] = True
    else:
        d['set1'] = False

    if num in set2:
        d['set2'] = True
    else:
        d['set2'] = False

    if num in set3:
        d['set3'] = True
    else:
        d['set3'] = False

    return d

最佳答案

您可以通过以下方式简化它:

def in_set(num):
    return {
        'set1': num in set1,
        'set2': num in set2,
        'set3': num in set3
    }

您甚至可以制作映射到这些集合上的集合名称的字典,然后使用字典理解:

my_sets = {
    'set1': set1,
    'set2': set2,
    'set3': set3
}

def in_set(num):
    return {
        k: num in v
        for k, v in my_sets.items()
    }

在这里我们可以轻松更改集合(或它们的名称),因此例如可以使用更多/其他集合。

关于python - 测试多组成员资格的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53308522/

相关文章:

python - 属性错误 : 'datetime' module has no attribute 'strptime'

python - 从匹配的正则表达式中提取数字数据

python - 在无限循环中使用Threading和Queue不会关闭线程

python - 如何将 OCSP 支持添加到 Python 请求库中?

Python3 : How to show "stopwatch" style time of long running blackbox function

python - 从自定义应用程序读取蓝牙低功耗数据到 ble dongle (csr8510)

python - 如何使用openCV和其他库在python中找到两个视频文件的PSNR和SSIM?

python - Python 中的 Windows 7 MARGINS 结构

python - 机器学习鸡尾酒会音频应用

python - 由于缺少 api 代理,从 Google Appengine 发送电子邮件失败