找到一种更有效的方法来用python编写If语句

2024-06-16 10:47:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第二次面对这种代码:

    if "associé" in gender or "gérant" in gender or "président" in gender or "directeur" in gender:
    gen = "male"
elif "associée" in gender or "gérante" in gender or "présidente" in gender or "directrice" in gender:
    gen = "female"
else:
    gen = "error"

我想找到一个更有效的方法来写这段代码,因为它看起来非常糟糕。你知道吗


Tags: or代码inifprgendermalegen
3条回答

我个人喜欢用^{}来做这件事。例如:

opts = ["associé", "gérant", "président", "directeur"]


if set(opts) & set(gender):
...

&用于集合交集操作,该操作返回一个新的set,集合在&两侧共享项。只有当genderopts中存在重叠时,才会执行if块。也可以对elif重复此过程,创建一个可能选项的列表,并检查该列表与gender之间的重叠。总之,你可以这样做:

male_opts = ["associé", "gérant", "président", "directeur"]
female_opts = ["associée", "gérante", "présidente", "directrice"]

if set(male_opts) & set(gender):
    gen = "male"
elif set(female_opts) & set(gender):
    gen = "female"
else:
    gen = "error"

另外,正如@Copperfield指出的那样。通过创建*_opt变量集(甚至可能是gender集),可以进一步提高效率:

male_opts = {"associé", "gérant", "président", "directeur"}
female_opts = {"associée", "gérante", "présidente", "directrice"}
gender = set(gender)

if male_opts & gender:
...

编辑:

上面的代码假设gender是一个iterable,但是从注释来看,它似乎是一个字符串(例如'associé gérant')。尽管此时接受的答案更好,但您仍然可以通过将gender作为组成字符串的一组单词来使用此解决方案:

gender = set(gender.split())

如果不能在一个gender字符串中有多个这样的刺痛,可能是这样的?你知道吗

gen = "error"
for g in ["associé", "gérant", "président", "directeur"]:
    if g in gender:
        gen = "male"
        break
for g in ["associée" "gérante", "présidente", "directrice"]:
    if g in gender:
        gen = "female"
        break

使用列表和any

males = ["associé", "gérant", "président", "directeur"]
females = ["associée", "gérante", "présidente", "directrice"]

if any(m in gender for m in males):
    gen = "male"
elif any(m in gender for m in females):
    gen = "female"
else:
    gen = "Error"

相关问题 更多 >