包含Python中的HashSet <Integer>

Bor*_*pov 36 python contains hashset

在Java中我们有HashSet<Integer>,我需要在Python中使用类似的结构包含如下所示:

A = [1, 2, 3]
S = set()
S.add(2)
for x in A:
    if S.contains(x):
        print "Example"
Run Code Online (Sandbox Code Playgroud)

能否请你帮忙?

ttt*_*sss 50

只需使用一套:

>>> l = set()
>>> l.add(1)
>>> l.add(2)
>>> 1 in l
True
>>> 34 in l
False
Run Code Online (Sandbox Code Playgroud)

列表同样适用:

>>> ll = [1,2,3]
>>> 2 in ll
True
>>> 23 in ll
False
Run Code Online (Sandbox Code Playgroud)

编辑: 注意@bholagabbar下面的评论in,列表和元组中的检查的时间复杂度平均为O(n)(参见此处的python文档),而对于集合,它平均为O(1)(最坏情况也是O(n) ),但非常罕见,只有在__hash__实施不当时才会发生).

  • 在列表和元组中搜索元素的复杂度将为O(n),因为它将在集合和字典中为O(1).因此更喜欢前者 (46认同)
  • @bholagabbar因此更喜欢后者* (34认同)
  • @sloreti:谢谢你指出这一点.所以我不会让我编辑我的评论.另外,就像一个注释一样,它将在集合和字典中分摊*O(1) (4认同)
  • 当所有哈希值发生冲突时,最糟糕的情况是O(n),但这是非常罕见的情况 (3认同)

小智 6

在Python中,有一个内置类型,set. 与Java中的主要区别在于hashmapPython是没有类型的,即在Python中set拥有集合是合法的。{'2', 2}

该类set没有contains()现成的方法来实现。我们通常使用 Python 关键字in来完成您想要的操作,即

A = [1, 2, 3]
S = set()
S.add(2)
for x in A:
  if x in S:
    print("Example")
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用,您可以调用特殊方法__contains__(),但不鼓励这样做。

A = [1, 2, 3]
S = set()
S.add(2)
for x in A:
  if S.__contains__(x):
    print("Example")
Run Code Online (Sandbox Code Playgroud)