2013-10-20 79 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) 
相關問題