Python 将唯一元素从列表排序到集合

Python 将唯一元素从列表排序到集合,python,function,Python,Function,我正在编写一个函数,将列表“list\U accepted\U car”返回的唯一值保存到集合“unique\U accepted\U ant”中。list_car_id是值为['12'、'18'、'3'、'7'的列表。当我运行代码时,我得到一个错误,“不可破坏列表”。有人能告诉我错误是什么吗 list_accepted_car = [] #set to store the value list_accepted_car unique_accepted_car = set()

我正在编写一个函数,将列表“list\U accepted\U car”返回的唯一值保存到集合“unique\U accepted\U 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
list_accepted_car=[]设置为存储值list_accepted_car
unique_accepted_car=set()#设置以存储值unique_accepted_car
num_accepted=2#允许进入的车辆数量的预定义值
def doi打开车门(list_car_id):#list_antu_id是允许进入的车辆列表
如果len(已接受列表\u车)0:
list_accepted_car.append(list_car_id[0:min(len(list_car_id),num_accepted-len(list_accepted_car)))
唯一接受列表=设置(列表接受汽车)
打印唯一\u已接受\u列表
退货清单(已接受)(汽车)

您正在保存无法转换为集合的列表列表。你得先把它弄平。有很多例子说明了如何做到这一点(我将使用
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))

最好的选择是在这里根本不使用列表,而是从一开始就使用集合。

假设
list\u car\u id
看起来像:
[1,2,3,4,5]
。 您在
list\u accepted\u car
中添加了
list\u car\u id
的子列表,因此
list\u accepted\u car
看起来像
[[1,2]]
,即列表。 那你应该换衣服

unique_accepted_list = set(list_accepted_car)


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

列表不是可散列对象,只有可散列对象才能成为集合的成员。所以,你不能有一套列表。本说明: list_accepted_car.append(list_car_id[0:min(len(list_car_id),num_accepted-len(list_accepted_car)))

list\u car\u id
的一部分追加到
list\u accepted\u car
,列表的一部分是列表。因此实际上,
list\u accepted\u car
变成了一个列表列表,这就是为什么要将其转换为集合:

unique_accepted_list = set(list_accepted_car)

失败了。也许您想要的是
扩展
,而不是
附加
?我不能说,因为我不知道你想要实现什么。

unique\u accepted\u list=set(list\u accepted\u car)打印unique\u accepted\u list return list\u accepted\u car这部分代码也应该缩进你能修改缩进吗?(
return
def
之外)因为list_accepted_car.append(list_car_id[0:min(len(list_car_id),num_accepted-len(list_accepted_car)))语句将列表追加到列表中。所以您不能对列表列表执行设置操作。@Nuageux缩进已修复。谢谢您的评论。我想要实现的是,给定list_ant_id=['1'、'2'、'3'、'4'、'5']和num_accepted=2,我想要list_accepted_cars=['1'、'2']。目前它给我['1','2',[1]]。该列表包含重复的相同元素。
unique_accepted_list = set(list_accepted_car)