将列表中的唯一元素排序为

2024-03-29 13:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数,将“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

Tags: thetostoreid列表lenvalue错误
3条回答

假设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])

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

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

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

列表不是可散列对象,只有可散列对象才能是集合的成员。所以,你不能有一套清单。本说明: 已接受列表_汽车.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变成了一个列表列表,这就是为什么要把它转换成一个集合:

unique_accepted_list = set(list_accepted_car)

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

相关问题 更多 >