首页 > 【Python3_基础系列_006】Python3-set-集合

【Python3_基础系列_006】Python3-set-集合

一、set集合的方法

set不是特别常用,但是set的一些特性可以方便处理一些特殊情况。

集合(set)是一个无序不重复元素的序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

创建格式:

parame = { value01,value02,...} 或者 set(value)
>>>basket = { 'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # 这里演示的是去重功能
{ 'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # 快速判断元素是否在集合内 True
>>> 'crabgrass' in basket
False
>>> # 下面展示两个集合间的运算. ...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a { 'a', 'r', 'b', 'c', 'd'}
>>> a - b # 集合a中包含元素 { 'r', 'd', 'b'}
>>> a | b # 集合a或b中包含的所有元素 { 'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # 集合a和b中都包含了的元素 { 'a', 'c'}
>>> a ^ b # 不同时包含于a和b的元素 { 'r', 'd', 'b', 'm', 'z', 'l'}

类似列表推导式,同样集合支持集合推导式(Set comprehension):

>>>a = { x for x in 'abracadabra' if x not in 'abc'}
>>> a { 'r', 'd'}

二、集合的基本操作

1、添加元素

语法格式如下:

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{ 'Taobao', 'Facebook', 'Google', 'Runoob'}

还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:

s.update( x )

x 可以有多个,用逗号分开。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.update({ 1,3})
>>> print(thisset)
{ 1, 3, 'Google', 'Taobao', 'Runoob'}
>>> thisset.update([1,4],[5,6])
>>> print(thisset)
{ 1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}
>>>

2、移除元素

语法格式如下:

s.remove( x )

将元素 x 添加到集合 s 中移除,如果元素不存在,则会发生错误。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>>thisset.remove("Taobao")
>>>print(thisset) { 'Google', 'Runoob'}
>>>thisset.remove("Facebook") # 不存在会发生错误
Traceback (most recent call last): File "", line 1, in <module> KeyError: 'Facebook' >>>

此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:

s.discard( x )
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>>thisset.discard("Facebook") # 不存在不会发生错误
>>>print(thisset)
{ 'Taobao', 'Google', 'Runoob'}

我们也可以设置随机删除集合中的一个元素,语法格式如下:

s.pop()
>>>thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
>>>thisset.pop() 'Taobao'
>>>print(thisset)
{ 'Facebook', 'Google', 'Runoob'}
>>>

3、计算集合元素个数

语法格式如下:

len(s)

计算集合 s 元素个数。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>>len(thisset)
3

4、清空集合

语法格式如下:

s.clear()

清空集合 s。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()

4、判断元素是否在集合中存在

语法格式如下:

x in s

判断元素 s 是否在集合 x 中存在,存在返回 True,不存在返回 False。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> "Runoob" in thisset True
>>> "Facebook" in thisset
False
>>>

三、面试题

1.列表排重?a=[1,2,3,4,5,6,7,5,3,2,1,3,43,5]

>>> a=[1,2,3,4,5,6,7,5,3,2,1,3,43,5]

>>> set(a)

{1, 2, 3, 4, 5, 6, 7, 43}

四、list类解析

>>> help(list)

Help on class list in module builtins:

class list(object)

| list() -> new empty list

| list(iterable) -> new list initialized from iterable's items  (注意这里是可迭代的对象,在python中查看对象 dir(obj、class) 如果包含__iter__方法,就是可迭代对象(可迭代类))

|

| Methods defined here:

|

| __add__(self, value, /)

| Return self+value.

|

| __contains__(self, key, /)

| Return key in self.

|

| __delitem__(self, key, /)

| Delete self[key].

|

| __eq__(self, value, /)

| Return self==value.

|

| __ge__(self, value, /)

| Return self>=value.

|

| __getattribute__(self, name, /)

| Return getattr(self, name).

|

| __getitem__(...)

| x.__getitem__(y) <==> x[y]

|

| __gt__(self, value, /)

| Return self>value.

|

| __iadd__(self, value, /)

| Implement self+=value.

|

| __imul__(self, value, /)

| Implement self*=value.

|

| __init__(self, /, *args, **kwargs)

| Initialize self. See help(type(self)) for accurate signature.

|

| __iter__(self, /)

| Implement iter(self).

|

| __le__(self, value, /)

| Return self<=value.

|

| __len__(self, /)

| Return len(self).

|

| __lt__(self, value, /)

| Return self
|

| __mul__(self, value, /)

| Return self*value.n

|

| __ne__(self, value, /)

| Return self!=value.

|

| __new__(*args, **kwargs) from builtins.type

| Create and return a new object. See help(type) for accurate signature.

|

| __repr__(self, /)

| Return repr(self).

|

| __reversed__(...)

| L.__reversed__() -- return a reverse iterator over the list

|

| __rmul__(self, value, /)

| Return self*value.

|

| __setitem__(self, key, value, /)

| Set self[key] to value.

|

| __sizeof__(...)

| L.__sizeof__() -- size of L in memory, in bytes

|

| append(...)

| L.append(object) -> None -- append object to end

|

| clear(...)

| L.clear() -> None -- remove all items from L

|

| copy(...)

| L.copy() -> list -- a shallow copy of L

|

| count(...)

| L.count(value) -> integer -- return number of occurrences of value

|

| extend(...)

| L.extend(iterable) -> None -- extend list by appending elements from the iterable

|

| index(...)

| L.index(value, [start, [stop]]) -> integer -- return first index of value.

| Raises ValueError if the value is not present.

|

| insert(...)

| L.insert(index, object) -- insert object before index

|

| pop(...)

| L.pop([index]) -> item -- remove and return item at index (default last).

| Raises IndexError if list is empty or index is out of range.

|

| remove(...)

| L.remove(value) -> None -- remove first occurrence of value.

| Raises ValueError if the value is not present.

|

| reverse(...)

| L.reverse() -- reverse *IN PLACE*

|

| sort(...)

| L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*

|

| ----------------------------------------------------------------------

| Data and other attributes defined here:

|

| __hash__ = None

转载于:https://www.cnblogs.com/forfreewill/articles/9281008.html

更多相关:

  • class str(basestring):"""str(object='') -> stringReturn a nice string representation of the object.If the argument is a string, the return value is the same object."""d...

  • 目录结构: contents structure [-] 类的基本使用专有方法继承单重继承多重继承砖石继承 1.类的基本使用 下面是类使用的一个简单案例, class person:"person 类的描述信息"def __init__(self,name="",age=0):self.name = nameself.age =...

  • 一、反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 python面向对象中的反射:通过字符串的形式操作对象相关的属性。pytho...

  • 1>UITextField实现leftView: self.inputTextField = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 200, 25)];self.inputTextField.delegate = self;self.inputTextField....

  • 集合一直都是项目中非常常见的,我是一个Android开发者,集合对于我来说,在项目中使用的次数非常之多,因为使用的多,熟能生巧,所以这里呢!就给那些初学者整理一下Java当中常用的集合吧!   因为此篇文章是给初学者看到,所以对于集合的认识,我们就不从内存的角度去分析了,等你Java学到一定的时候,再去学习一下集合的底层实现,这会让...

  • 在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量。一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了。集合类主要负责保存、盛装其他...

  • 欧拉定理:对于互质的两个正整数$a, n$,满足$a^{φ(n)} ≡ 1  (mod n)$ 证明:   设集合$S$包含所有$n$以内与$n$互质的数,共有$φ(n)$个:$$S = { x_1, x_2, ..., x_{φ(n)} } $$   再设集合$T$:$$T = { a * x_1 \% n, a * x_...

  • 栈stack:stack 后入先出(LIFO) q.top()获取栈顶元素(并不删除)q.pop()删除栈顶元素q.push(x)向栈中加入元素q.empty()判断栈是否为空 队列queue:先入先出(FIFO)   q.front()获取队首元素(并不删除)q.pop()删除队首元素q.push(x)向队列中加入元素q....

  • resize(),设置大小(size); reserve(),设置容量(capacity); size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。 打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说...

  • v-for="(index,$i) in total" :key="$i":style="{left:`${itemWidth*((index-1)%rowItemCount)}px`,top:`${itemHeight*(Math.ceil(index/rowItemCount)-1)}px`}" //total是显示总数量 //l...

  •   技巧一(推荐指数★★★★★) 采用top、right、bottom、left,可以不在乎父元素的宽度和高度,对GPU损耗低于技巧三,但是对浏览器内存的消耗高于技巧三 .子元素 {/*父元素需要position: relative|absolute;*/position: absolute;margin: auto;to...

  • 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。 示例: MinStack minStack = new MinStack(); minStack...