将列表中的唯一元素排序到集合

时间:2017-06-01 10:07:38

标签: python function

我正在编写一个函数来将列表“list_accepted_car”返回的唯一值保存到set“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

3 个答案:

答案 0 :(得分: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])

将提取子列表的每个元素并提供展平列表。 (还有其他选项可以压缩列表列表)

答案 1 :(得分:0)

您正在保存列表,这些列表无法转换为集合。你必须先把它弄平。有很多如何做的例子(我将使用from itertools import chain # code ... unique_accepted_list = set(chain.from_iterable(list_accepted_car)) 提供一个我更喜欢python的嵌套理解)。

另外,作为旁注,我通过分成几行来使这一行更具可读性:

{{1}}

你可以这样做:

{{1}}

最好的选择是在这里不使用列表,并从头开始使用一个集。

答案 2 :(得分:0)

列表不是可清除对象,只有可清除对象可以是集合的成员。所以,你不能拥有一套清单。这条指令:     list_accepted_car.append(list_car_id [0:分钟(LEN(list_car_id),num_accepted-LEN(list_accepted_car))])

list_car_id切片附加到list_accepted_car,列表的切片是列表。所以实际上list_accepted_car变成了一个列表列表,这就是将它转换为集合的原因:

unique_accepted_list = set(list_accepted_car)

失败。也许你想要的是extend而不是append?我不能说,因为我不知道你想要达到什么目的。