Python基础之 set集合|Python 主题月

546 阅读2分钟

set集合

本文正在参加「Python主题月」,详情查看活动链接

set集合是一个非常有用的数据结构。set类似于列表,区别在于它不能包含重复值。在很多情况下它真的很有用。例如,您可能想检查列表中是否有重复项。你有两个选择。第一个涉及使用for循环。像这样的东西:

集合:不允许重复元素,而且进行交集以及并集的运算

表示:{} 和dict之间的关系:set中只是存储了key

本质:无序且无重复元素的集合

list1 = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']

duplicates = []
for value in list1:
    if list1.count(value) > 1:
        if value not in duplicates:
            duplicates.append(value)

print(duplicates)
>>> ['b', 'n']

但是有一个更简单、更优雅的解决方案,涉及sets. 你可以简单地做这样的事情:

list1 = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
duplicates = set([x for x in list1 if some_list.count(x) > 1])  # set(list1)
print(duplicates)
>>> set(['b', 'n'])

Sets 还有一些其他的方法。以下是其中一些。

  • add() 添加

    • 单个元素,如果添加的元素存在,则添加失败,不报错
    • 多个元素,在set中,使用add添加,则只能添加元组,不能添加list和dict
  • update() 更新

    • 不能直接添加,参数可以是列表,元组,字典等(添加字典的话,只会把key添加进去)
# add(),添加,
set1 = {11, 22, 33, 44, 55}
# 单个元素
set1.add(66)
set1.add(55) # 如果添加的元素存在,则添加失败,不报错
# 多个元素
# s1.add([77,88])   #TypeError: unhashable type: 'list'
s1.add((77, 88))
# s1.add({1:"a"})
# 结论:在set中,使用add添加,则只能添加元组,不能添加list和dict
​
​
# update(),更新,update的参数只能是可迭代对象【打碎加入】
set2 = {11, 22, 33, 44, 55}
# set2.update(66)   #报错:TypeError: 'int' object is not iterable
set2.update([66])  # []
set2.update((77, 88))  # ()
set2.update({"12": 14, "13": 13})  # 只会把key添加进去
set2.update("hgjhgaa")  # 把字符个个的添加进去(不会把重复的添加进去)

删除

  • remove() 如果删除的元素不存在,则会发生错误.
  • discard() 如果删除的元素不存在,不会发生错误.
  • pop() 随机删除集合中的一个元素
  • clear() 清空集合
set2.remove(77)
set2.discard(33)
set2.pop()
set2.clear()

交集和并集

# 交集和并集
s1 = {3, 54, 4, 5, 7}
s2 = {3, 54, 4, 8, 90}
# 交集:&【按位与】
print(s1 & s2)
# 并集:|【按位或】
print(s1 | s2)

面试题

# 掌握:去除列表中的重复元素
s2 = set([3, 46, 5, 65, 7, 65, 7])  # []
s3 = set((2, 43, 54, 5, 4, 5))  # ()
s4 = set({10: "a", 20: "b"})  # 字典的话,只有key

\