2013-10-20 80 views
0

我们给出了不同动物园中的动物列表,并且需要查找哪些动物园中的动物不在其他任何动物园中。每个动物园的动物都被空格隔开,每个动物园最初都以逗号分隔。Python中列表中的列表的唯一元素

目前我列举了所有的动物园,以这样针对不同的动物园列表中的分裂每个动物以及创建列表:

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

不过,我后来不知道怎么告诉我们,算多少的动物园有独特的动物。我认为这是enumerate和其他可能的设置,但不能准确把握它。

+0

您可以添加数据结构的一些例子吗? –

+3

如果您显示代码和数据,而不是仅仅描述它,它会更好。 – TryPyPy

回答

0

我认为set是wot您正在查找。

您可以添加和减去集合,找到它们的交集 因此,所有你需要找到动物园哪一组动物具有不属于动物组的其他动物园的项目。如果你将在动物园中减去动物中的所有其他动物,你就会得到独特的动物。

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])) 
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 

我能做些什么来我们的情况比较有用,但我会需要你的一些代码。

0

你也许可以做一套,但你并不需要。您需要考虑如何组织数据,即数据结构。

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

0

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

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) 
相关问题