我正在编写一个函数,将“list\u accepted\u car”列表返回的唯一值保存到“unique\u accepted\u ant”集合中。list\u car\u id是值为['12'、'18'、'3'、'7']的列表。当我运行代码时,我得到一个错误,“unhable list”。有人能告诉我错误是什么吗?你知道吗
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_car_id
看起来像:[1,2,3,4,5]
。 在list_accepted_car
中添加list_car_id
的子列表,因此list_accepted_car
看起来像[[1,2]]
,即列表的列表。 那你应该换衣服至
它将提取子列表的每个元素并提供一个扁平列表。(有其他选项可展平列表)
您正在保存一个列表列表,该列表无法转换为集合。你得先把它弄平。有很多例子说明如何做到这一点(我将使用
itertools.chain
提供一个例子,我更喜欢python的嵌套理解)。你知道吗另外,作为旁注,我将这一行分成几行,以使其更具可读性:
你可以做:
最好的选择是在这里根本不使用列表,而是从一开始就使用集合。你知道吗
列表不是可散列对象,只有可散列对象才能是集合的成员。所以,你不能有一套清单。本说明: 已接受列表_汽车.append(list\u car\u id[0:min(len(list\u car\u id),num\u accepted-len(list\u accepted\u car))])
将
list_car_id
的片附加到list_accepted_car
,列表的片就是列表。所以实际上list_accepted_car
变成了一个列表列表,这就是为什么要把它转换成一个集合:失败。也许你想要的是
extend
而不是append
?我不能说,因为我不知道你想要达到什么。你知道吗相关问题 更多 >
编程相关推荐