Python基本数据类型之集合

栏目: Python · 发布时间: 6年前

内容简介:集合作为Python基本数据类型之一,相较于整型和字符串等类型来说难度要高很多,我们需要深入了解集合且熟练掌握集合的使用方法。参考:侠课岛(

集合作为 Python 基本数据类型之一,相较于整型和字符串等类型来说难度要高很多,我们需要深入了解集合且熟练掌握集合的使用方法。

1.那什么是集合呢?

  • 集合(set)是Python的一种基本数据类型;
  • 集合是一个可变的无序的,且不可重复的元素序列;
  • 集合不可以使用索引访问,因为集合(set)是无序的,但是集合可以被迭代;
  • 集合的元素必须是可以hash类型的,也就是必须是hashable;
  • 判断一个对象是否可以hash:hash([1,2]);

2.可以hash类型

  • 数值类型;
  • 布尔类型;
  • 字符串类型;
  • bytes;
  • 元组;
  • None;

3.不可以hash类型

  • list;
  • bytearray;
  • set;

4.集合的定义

#定义空集合
s = set()   

s = {}       #注意这是定义字典的

# 初始化一个集合
s = {1,2,3}

s1 = {(1,2,3),100,'abc'}    #元组是可以被hash的,所以可以作为集合的元素
print(s1)    #输出:{'abc', 100, (1, 2, 3)}

s2 = {[1,2,3],(1,2,3),100}   #列表是不可hash的,所以输出会报错
print(s2)  #报错

s3 = set([1,2,3,4])
print(s3)   #输出:{1, 2, 3, 4}
  • 定义一个集合的语法是: s = set() ,而直接 s = {} 是定义一个空字典的语法;
  • 集合的初始化可以直接在中括号 {} 中赋值,类似与: s = {1,2,3}
  • 使用{}定义的集合,是集合的最终形式,所以不能有不可hash元素;
  • 使用set()方法和update()方法是可以传入列表的,因为python程序会把这个列表自动转换为集合,所以,你会发现通过set([1,2,3]),输出的时候就会变成了{1,2,3}这样的,就是把列表合并成了一个集合;

5.集合的插入

定义一个集合s
s = set()

s.add(1)
s.add(1)
print(s)     # 输出:{1}   因为集合可以去重
add()

6.集合的修改

#定义一个集合s
s = set()
s.update([1, 2, 3, 4, 5])     #update()可以传人列表,会自动转换为集合
print(s)   输出:{1, 2, 3, 4, 5}
  • 集合的的修改方法是 update() 方法,可以修改集合中的元素;

7.集合的查询

s = {1,2,3,4}
for item in s:
    print(item)

输出:
1
2
3
4
  • 集合是无序的,不能使用 index 索引查询,只能用迭代来查询;

8.集合的删除

s = {1,2,3,4,5}

# remove方法
s.remove(1)
print(s)    #输出:{2, 3, 4, 5}

#discard方法
s.discard(6)
print(s)    #输出:{1, 2, 3, 4, 5}  不会报错

#pop方法
s.pop()
print(s)    #输出:{2, 3, 4, 5}

# clear方法
s.clear()
print(s)    #输出:set()
  • remove :remove(value)方法直接移除元素的某个值,如果元素不存在,remove方法会报错;
  • discard : discard方法与remove方法类似,不同在于如果元素不存在,discard不会报错;
  • pop :一般来说集合中pop()方法是随机删除元素的,如果集合为空则报异常;
  • clear :清除集合中所有元素;

9.集合的对象操作

  • 并集 :两个集合求并集可以使用union()方法,或者使用 | 符号连接两个集合(多个元素则可以使用update()方法);
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s3 = {1,5,7,8}

#两个集合求并集:
sets = s1.union(s2)
print(sets)         #输出:{1, 2, 3, 4, 5, 6}

#多个集合求并集:
sets = s1 | s2 | s3 
print(sets)       #输出:{1, 2, 3, 4, 5, 6, 7, 8}
  • 交集 :两个集合求交集可以使用intersection()方法(多个集合可以使用intersection_update()方法);
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s3 = {4,5,6,7}

#两个集合求交集:
sets = s1.intersection(s2)
print(sets)   #输出:{3, 4}

#多个集合求交集:
s1.intersection_update(*(s2,s3))
print(s1)  #输出:{4}
  • 差集 :两个集合求差集可以使用difference方法,例如s1.difference(s2)表示s1有但s2没有的元素,反之亦然(多个集合用difference_update()方法)
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s3 = {5,6,7,8}

#两个集合求差集:
sets = s1.difference(s2)
print(sets)    #输出:{1, 2}

#多个集合求差集:
s1.difference_update(*(s2,s3))
print(s1)      #输出:{1, 2}

10.集合查询效率问题

  • 线性结构的查询时间复杂度是O(n), 随着数据元素的增多,那么查询的时间线性增长;
  • Python中的set、dict可以认为是非线性结构,那么查询时候的时间复杂度就不是O(n),其存储结构采用的是散列表(hash表),其在最优情况下查询复杂度为O(1);
  • 所以集合查找时并不会随着元素集的增大而时间变长;

参考:侠课岛( 9xkd.com )Python同学计划(侵删)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Refactoring

Refactoring

Martin Fowler、Kent Beck、John Brant、William Opdyke、Don Roberts / Addison-Wesley Professional / 1999-7-8 / USD 64.99

Refactoring is about improving the design of existing code. It is the process of changing a software system in such a way that it does not alter the external behavior of the code, yet improves its int......一起来看看 《Refactoring》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具