Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个周期内比较集合?_Python - Fatal编程技术网

Python 如何在一个周期内比较集合?

Python 如何在一个周期内比较集合?,python,Python,我有一个任务: 我们有一套存储产品N,商店的产品组合是这套产品中的很多产品。这家公司拥有100家商店。有关这些商店提供的产品组合的信息,请创建一个程序,该程序将构成以下集合: 集合A:所有商店拥有的产品集合 B:一套产品,每个产品至少在一家商店内 C:任何商店都没有的一套产品 我试过这个: import random storage = {"tomatoes", "cucumbers", "corn", "oranges

我有一个任务:

我们有一套存储产品N,商店的产品组合是这套产品中的很多产品。这家公司拥有100家商店。有关这些商店提供的产品组合的信息,请创建一个程序,该程序将构成以下集合:

  • 集合A:所有商店拥有的产品集合
  • B:一套产品,每个产品至少在一家商店内
  • C:任何商店都没有的一套产品
我试过这个:

import random

storage = {"tomatoes", "cucumbers", "corn", "oranges", "bananas", "apples", "grapes", "mandarins", "crab sticks", "mayonnaise", "ketchup", "tomato sauce"}
n = int(input("enter number of stores "))
shop = []
k = len(storage)
st_list = list(storage)
stor_del = st_list[random.randint(0, k - 1)]
for i in range(n):
    shop.append(set())
    for j in range(5):
        shop[i].add(st_list[random.randint(0, k - 1)])
    shop[i].discard(stor_del)

    print(shop[i])

但我不知道如何完成任务的第二部分。

通过在集合上使用位运算符,可以在两个存储之间分别完成这些操作:

  • {a}{b}
    取两个集合的并集,返回一个新集合,其中包含其任一参数包含的每个项
  • {a}&{b}
    获取两个集合的交集,返回一个只包含它们共享的项目的新集合
  • {a}^{b}
    获取两个集合的对称差,返回一个新集合,该集合仅包含任一集合包含的元素,但不同时包含这两个元素
如果您有两个以上的集合(例如,您的
shop
是集合列表),则可以使用将同一运算符应用于所有集合:

import operator
from functools import reduce

union = reduce(operator.or_, shop)
intersect = reduce(operator.and_, shop)
sym_diff = reduce(operator.xor, shop)  

(我使用模块而不是lambdas,只是因为它看起来像更干净的代码)。

你的问题的标题是什么意思?您希望精确比较哪些集合?什么是“一个周期”?你能在没有“一个周期”要求的情况下解决这个任务吗?我需要将设置的“商店”与“自身”进行比较,以找出所有商店中都有哪些产品,或者哪些产品只在一个商店中,或者哪些产品根本没有。(对不起我的英语)非常感谢