Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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_List_Set_Enumerate - Fatal编程技术网

python中列表中列表的唯一元素

python中列表中列表的唯一元素,python,list,set,enumerate,Python,List,Set,Enumerate,我们得到了不同动物园的动物列表,需要找出哪些动物园有其他动物园没有的动物。每个动物园的动物用空格分隔,每个动物园最初用逗号分隔 我目前正在列举所有动物园,以分割每只动物,并在不同动物园的列表中创建列表,例如: for i, zoo in enumerate(zoos): zoos[i] = zoo.split() 然而,我不知道如何分辨和计算有多少动物园有独特的动物。我想这是另一个用枚举和可能设置的东西,但不能准确地记下来 我认为set是您需要的 您可以添加和减去集合,找到它们的交点

我们得到了不同动物园的动物列表,需要找出哪些动物园有其他动物园没有的动物。每个动物园的动物用空格分隔,每个动物园最初用逗号分隔

我目前正在列举所有动物园,以分割每只动物,并在不同动物园的列表中创建列表,例如:

for i, zoo in enumerate(zoos):
    zoos[i] = zoo.split()

然而,我不知道如何分辨和计算有多少动物园有独特的动物。我想这是另一个用
枚举
和可能设置的东西,但不能准确地记下来

我认为
set
是您需要的

您可以添加和减去集合,找到它们的交点 所以你们需要找到动物园,哪一组动物有不在其他动物园的联合动物组中的项目。如果你从动物园里的动物中减去所有其他动物,你就得到了独一无二的动物

zoos = ['mouse,dog', 'dog,tiger,mouse', 'mouse,cat']
for zoo in zoos:
    zoo_animal = set(zoo.split(','))
    other_zoo_animals = set(animal for z in zoos if z != zoo for animal in z.split(','))
    unique_animals = zoo_animal - other_zoo_animals
    if unique_animals:
       print "%s: %s" % (zoo, unique_animals)
或者你可以找到每种动物的生活地点:

zoos = ['mouse,dog', 'dog,tiger,mouse', 'mouse,cat']
animals = {}
for i, zoo in enumerate(zoos):
    zoo_animal = set(zoo.split(','))
    for animal in zoo_animals:
        animals.setdefault(animal, []).append(i)
# Now You can iterate over all animals and find ones which are only present in one zoo
for animal, zoo_list in animals.iteritems():
    if len(zoo_list) == 1:
        print("% lives in %s only" % (animal, zoo_list[0]))
你应该使用集合

一个集合只有唯一的项,每当你想到列表中唯一的项时,你应该想到集合

使用特定动物园的动物创建集合a,使用所有其他动物创建集合B。 然后迭代删除A中的所有动物,也删除B中的所有动物。 结果将是独一无二的例子

试试这个:

def unique_animals(zoo, list_of_zoos):
    animals_in_other_zoos = set()
    for element of list_of_zoos:
        animals_in_other_zoos.add(set(element))
    unique_animals = set(zoo)
    for element in unique_animals:
        if element in animals_in_other_zoos:
            unique_animals.remove(element)
    return unique_animals

我可以做一些对我们的案例更有用的事情,但我需要你的一些代码。

你可以用一套来做,但你真的不需要。您需要考虑如何组织数据,即数据结构


这里有一种方法:要找出只存在于一个动物园中的动物,你需要一个列表,为每种动物列出拥有它的动物园。因此,为每只动物建立这样一个动物园列表(我会用字典来保存动物的名字,但即使是一个普通的列表也可以),然后看看每只动物,挑选只列出一个动物园的动物。

如果我理解正确,你会得到这样一个字符串:

input_date = 'dog dog mouse cat, dog pidgin elephant, zebra cat lion'
zoos = input_date.split(',')

for zoo in zoos:
    zoo_animal = set(zoo.split())
    other_zoo_animals = set(animal for z in zoos if z != zoo for animal in z.split())
    unique = zoo_animal - other_zoo_animals
    if unique:
       print "%s: %s" % (zoo, animals)

你能添加一些数据结构的例子吗?如果你展示代码和数据,而不是仅仅描述它,它会工作得更好。