检查不可杂项是否已在列表/集中

时间:2019-01-10 04:38:39

标签: python python-3.x

我想查看某个项目是否已在列表或集合中。通常,我会这样做(如果不是字典):

items = set()
for nested_item in nested_items:
    items.append(nested_item)

但是,这给了我一个错误:

  

TypeError:不可散列的类型:“列表”

我现在能做的唯一方法如下:

items = list()
for nested_item in nested_items:
    if nested_item not in items:
        items.append(nested_item)

有更好的方法吗?有没有办法仍然使用set

2 个答案:

答案 0 :(得分:2)

您可以使用UPDATE `task` SET task_users = REGEXP_REPLACE(task_users, CONCAT('(,', @userID, '|', @userID, ',?)'), ''); WHERE task_users RLIKE CONCAT('(^|,)', @userID,'(,|$)') (可散列)。像tuple这样的可变对象是不可哈希的,而像list这样的可变对象是不可哈希的。 tupleset的内部依赖哈希值。

dict

这也可以一行完成:

items = set()
for nested_item in nested_items:
    items.add(tuple(nested_item))

items = set(tuple(nested_item) for nested_item in nested_items)

在所有三种情况下,输出将是(给出示例items = {tuple(nested_item) for nested_item in nested_items} ):

nested_items

此外,在检查成员资格时,请确保将所有nested_items = [[1, 2], [2, 3], [1, 2], [3, 4], [4, 5], [2, 3]] items = {(1, 2), (2, 3), (3, 4), (4, 5)} 转换为list

tuple

有时,一个列表包含其他列表,仅进行print([1, 2] in items) # TypeError: unhashable type: 'list' print(tuple([1, 2]) in items) # True print((1, 2) in items) # True 调用是不够的:

tuple

在这种情况下,请使用简单的配方进行转换:

print(tuple([[1, 2], [3, 4]]))
([1, 2], [3, 4])

答案 1 :(得分:0)

对于集以及字典键,您必须使用可哈希对象。这是必需的,因为在基础实现中使用了哈希。在其他类型中,类似的类型可能称为哈希表,您可以在名称中直接看到哈希的重要性。

如果您能够为某项计算机唯一的可复制键,则可以使用该键和该项作为值的字典。如果没有,则字典和字典都不适合您的问题。

BTW集使用.add()代替.append()