python中的集合

145 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

集合的创建

  • 先创建对象再加入元素。
  • 在创建空集合的时候只能使用s = set(),因为s = {}创建的是空字典。
basket = set()
basket.add('apple')
basket.add('banana')
print(basket)  
# {'apple', 'banana'}
  • 直接把一堆元素用花括号括起来{元素1, 元素2, ..., 元素n}
  • 重复元素在set中会被自动被过滤。
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)  
# {'apple', 'banana', 'pear', 'orange'}
  • 使用set(value)函数,把列表或元组转换成集合。
a = set('abracadabra')
print(a)  
# {'b', 'r', 'c', 'a', 'd'}
b = set(("Google", "Lsgogroup", "Taobao", "Taobao"))
print(b)  
# {'Google', 'Lsgogroup', 'Taobao'}
c = set(["Google", "Lsgogroup", "Taobao", "Google"])
print(c)  
# {'Google', 'Lsgogroup', 'Taobao'}

去掉列表中重复的元素

lst = [0, 1, 2, 3, 4, 5, 5, 3, 1]
temp = []
for item in lst:
    if item not in temp:
        temp.append(item)
print(temp)  
# [0, 1, 2, 3, 4, 5]


a = set(lst)
print(list(a))  
# [0, 1, 2, 3, 4, 5]

从结果发现集合的两个特点:无序和唯一 。

访问集合中的值

  • 可以使用len()內建函数得到集合的大小。
s = set(['Google', 'Baidu', 'Taobao'])
print(len(s))  
# 3

  • 可以使用for把集合中的数据一个个读取出来。
s = set(['Google', 'Baidu', 'Taobao'])
for item in s:
    print(item)
# Baidu
# Google
# Taobao

  • 可以通过innot in判断一个元素是否在集合中已经存在
s = set(['Google', 'Baidu', 'Taobao'])
print('Taobao' in s)  
# True
print('Facebook' not in s)  
# True

集合的转换

se = set(range(4))

li = list(se)

tu = tuple(se)

print(se, type(se))  # {0, 1, 2, 3} <class 'set'>

print(li, type(li))  # [0, 1, 2, 3] <class 'list'>

print(tu, type(tu))  # (0, 1, 2, 3) <class 'tuple'>

{0, 1, 2, 3} <class 'set'>
[0, 1, 2, 3] <class 'list'>
(0, 1, 2, 3) <class 'tuple'>

不可变集合

Python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset。需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。

  • frozenset([iterable]) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
a = frozenset(range(10))  
# 生成一个新的不可变集合
print(a)  
# frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
b = frozenset('lsgogroup')
print(b)  
# frozenset({'o', 'p', 'l', 's', 'r', 'u', 'g'})