2017-06-01 91 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]]。该列表包含重复的相同元素。 –

相关问题