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
\