2

我有不同的产品组,比如说玩具、衣服和食物。当我得到一系列(或列表)产品时,我想知道它们是否都属于一个组,或者我是否有几个组的产品。

让我们举个例子:

toys=['Car', 'Teddy Bear', 'Doll']
food=['Banana', 'Cola', 'Bread', 'Milk']

因此,当我得到时,['Cola', 'Milk']我希望它返回 True (它们都掉入食物中),而当我得到时,['Milk', 'Banana', 'Car']我希望它返回 False (包含toysAND的产品food)。

除了循环遍历我的所有组并逐个检查所有产品是否都在该特定组中之外,还有其他方法可以检查吗?

谢谢!

4

3 回答 3

2

这本质上是一个集合操作。您可以将toysand转换food为集合,然后使用set.intersection. 例如:

toys = ["Car", "Teddy Bear", "Doll"]
food = ["Banana", "Cola", "Bread", "Milk"]

toys, food = set(toys), set(food)


def is_only_one_group(l):
    return bool(toys.intersection(l)) + bool(food.intersection(l)) == 1


print(is_only_one_group(["Milk", "Banana", "Car"]))
print(is_only_one_group(["Cola", "Milk"]))

印刷:

False
True
于 2021-04-25T11:35:12.933 回答
1

您可以在 Python 中使用set数据结构。

  • 对于每个组,检查您的输入列表是否是一个子集。
  • 然后验证它是否恰好是一组的子集。
toys=['Car', 'Teddy Bear', 'Doll']
food=['Banana', 'Cola', 'Bread', 'Milk']

def is_in_one_group(my_list):
    belongs_in_group = [set(my_list).issubset(toys), set(my_list).issubset(food)]
    return sum(belongs_in_group) == 1


is_in_one_group(['Cola', 'Milk'])
# True

is_in_one_group(['Milk', 'Banana', 'Car'])
# False

is_in_one_group([])
# False
于 2021-04-25T11:45:10.980 回答
1

您可以从列表中构建字典,以便列表条目是键,值是它们所属列表的名称。然后我们可以映射新列表中的项目并检查唯一元素的数量是否为 1:

toys_dict = dict.fromkeys(toys, "toys")
food_dict = dict.fromkeys(food, "food")

combined_dict = {**toys_dict, **food_dict}

def is_only_one_group(new_list):
    return len(set(combined_dict[val] for val in new_list)) == 1

用作

>>> is_only_one_group(["Cola", "Milk"])
True

>>> is_only_one_group(["Milk", "Banana", "Car"])
False
于 2021-04-25T11:31:55.210 回答