修复在检查不同集合中的元素成员身份时出现多个elif的问题



如果这是重复的,我很抱歉,但我找不到一个能帮助我解决确切问题的问题,所以我想试试我的第一个堆栈溢出帖子。

我有一个字符串的列表和大约10个不同的字符串集,我想根据每个字符串所在的集执行不同的操作(目前,我可以假设这些集不重叠(。如果它们中没有任何一个,那么我就继续。现在我只有10个if/elifs,它似乎有点低效,我想知道是否有什么方法可以改进它?

举个例子:

sandwich_ingredients = ["bacon", "cheese", "bread", "lettuce", "car"]
vegetables = {"cucumber", "lettuce", "onion", "potato", "carrot"}
meats = {...}
carbs = {...}
dairy = {...}
for ingredient in pizza_ingredients:
if ingredient in vegetables:
print("veggie!")
elif ingredient in meats:
print("meat!")
elif ingredient in carbs:
print("carb!")
elif ingredient in dairy:
print("dairy!")
else:
continue

正如你所看到的,如果我有更多的布景,它会变得有点长和笨拙。。。此外,我不仅仅是打印出集合的名称,这只是一个帮助展示我试图弄清楚的示例。:(非常感谢你的帮助!

编辑:我需要知道它是在哪个集合中找到的,因此打印示例btw

将所有内含物类别放入一个结构中,并在其中循环:

vegetables = {"cucumber", "lettuce", "onion", "potato", "carrot"}
meats = {...}
carbs = {...}
dairy = {...}
all_categories = {
"vegetables": vegetables,
"meats": meats,
"carbs": carbs,
"dairy": dairy,
}
for ingredient in pizza_ingredients:
for category_name, category_items in all_categories.items():
if ingredient in category_items:
print(category_name)

如果不需要category_name,请将all_categories定义为列表,而不是字典

Python不知道您的集合是互斥的。因此,需要elif。如果您愿意通过将元素映射到它们的集合名称来预先计算它们的分隔,那么您可以删除elif。类似:

X = {1,2,3}
Y = 'abc'
ALL = {1:"X",2:"X",3:"X",'a':'Y','b':'Y','c':'Y'}
for i in ingredients:
name_of_set = ALL[i]

最新更新