2017-06-01 92 views
0

我正在寫一個函數來保存列表「list_accepted_car」返回給集合「unique_accepted_ant」的唯一值。 list_car_id是值爲['12','18','3','7']的列表。當我運行代碼時出現錯誤,「不可用列表」。任何人都可以告訴我什麼是錯誤?將列表中的唯一元素排序到集合

list_accepted_car = []  #set to store the value list_accepted_car 
unique_accepted_car = set()  #set to store the value unique_accepted_car 
num_accepted = 2    #predifined value for the number of cars allowed to enter 
def DoIOpenTheDoor(list_car_id): #list_ant_id is a list of cars allowed to enter 
    if len(list_accepted_car) < num_accepted: 
     if len(list_car_id) > 0: 
      list_accepted_car.append(list_car_id[0:min(len(list_car_id),num_accepted-len(list_accepted_car))])    
    unique_accepted_list = set(list_accepted_car) 
    print unique_accepted_list 
    return list_accepted_car 
+0

unique_accepted_list =集(list_accepted_car) 打印unique_accepted_list 回報list_accepted_car 代碼的這部分也應縮進 – crazyglasses

+2

你能解決這個缺口嗎? ('def'外的'return') – Nuageux

+0

因爲list_accepted_car.append(list_car_id [0:min(len(list_car_id),num_accepted-len(list_accepted_car))]])語句附加list中的列表。所以你不能對列表清單進行設置操作。 –

回答

1

假設list_car_id看起來像:[1,2,3,4,5]。 您在list_accepted_car中添加了list_car_id的子列表,因此list_accepted_car看起來像[[1,2]]即列表的列表。 那麼你應該改變

unique_accepted_list = set(list_accepted_car) 

unique_accepted_list = set([x for y in list_accepted_car for x in y]) 

將提取子列表中的每個元素,並提供了一個扁平化列表。 (還有其他選項可以將列表壓扁)

+0

謝謝你,它工作。 –

0

您正在保存的列表不能轉換爲一個列表。你必須先把它弄平。有很多如何做到這一點的例子(我會提供一個使用itertools.chain,我更喜歡python的嵌套理解)。

此外,作爲一個側面說明,我會做這行更具可讀性通過分離到的幾行:

list_accepted_car.append(list_car_id[0:min(len(list_car_id),num_accepted-len(list_accepted_car))]) 

你可以這樣做:

from itertools import chain 
# code ... 
unique_accepted_list = set(chain.from_iterable(list_accepted_car)) 

最好的辦法是不在這裏使用一個列表,並從一開始就使用一組。

+0

感謝您的評論。 –

0

列表不是可哈希對象,只有可哈希對象可以是集合的成員。所以,你不能有一套列表。此指令: list_accepted_car.append(list_car_id [0:分鐘(LEN(list_car_id),num_accepted-LEN(list_accepted_car))])

追加的list_car_idlist_accepted_car片,和一個列表的片段是一個列表。所以在效果list_accepted_car成爲一個列表的列表,這就是爲什麼它轉換爲一組:

unique_accepted_list = set(list_accepted_car) 

失敗。也許你想要的是extend而不是append?我不能說,因爲我不知道你想達到什麼。

+0

感謝您的意見。我想要實現的是,給list_ant_id = ['1','2','3','4','5']和num_accepted = 2,我將list_accepted_cars = ['1','2' ]。目前它給我[['1','2'],[1]]。該列表包含重複的相同元素。 –

相關問題