我正在编写一个函数来将列表“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
答案 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
?我不能说,因为我不知道你想要达到什么目的。