python中集合的特点和注意点?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中集合的特点和注意点?相关的知识,希望对你有一定的参考价值。
参考技术A 集合的特点:1.不同元素组成(元素不能重复百)
2.无序(集合元素的顺序和定义、添加的顺序不一致)
3.集合中的元素必度须是不可变类型
集合的注意点:
1.定义一个集合,如果直接写my_set
=
,不添加数据,python解释器会把my_set作为字典处理版
2.可以在集合中做添加相同元素的操作,但是集合只存储一个
如果想深入了解可以搜索黑马权程序员视频库,里面有很多免费的软件测试教程 参考技术B
1、集合概念
Python中的集合,是一个无序的、没有重复项的集。它支持数学概念上的集合操作,如交集、并集、补集和差集。集合是可变的,可以在其中添加或删除项。集合用花括号“”括起来,并用逗号“,”来分隔其中的项。
2、创建集合
可以使用花括号“”创建集合,集合会自动去除重复的项。下面的集合包含了几种用字符串表示的水果:
>>> # 创建fruits集合时,'apple'出现了两次
>>> fruits = 'apple', 'banana', 'watermelon', 'strawberry', 'apple'
>>> fruits # 查看fruits集合,'apple'只有保留了一个
'apple', 'strawberry', 'banana', 'watermelon'
与列表、元组、字典一样,集合也可以用工厂函数set()来创建。set()函数的参数要么为空,要么为可迭代对象(如列表、元组和字符串):
>>> fruits = set(['apple', 'banana', 'watermelon', 'strawberry', 'apple']) # 以列表为参数创建集合
>>> fruits
'apple', 'strawberry', 'banana', 'watermelon'
>>> numbers = set((1, 2, 3, 3, 2, 4)) # 以元组为参数创建集合
>>> numbers
1, 2, 3, 4
>>> letters = set('banana') # 以字符串为参数创建集合
>>> letters
'b', 'a', 'n'
如果想要创建一个空集合,那么使用空的花括号“”是行不通的,因为这样创建的是一个空字典:
>>> empty =
>>> empty
>>> type(empty)
<class 'dict'>
创建空集合的唯一方式就是使用不包含任何参数的set()函数:
>>> empty = set()
>>> empty # 空集合表示为set()
set()
>>> type(empty)
<class 'set'>
3、集合添加项
集合是可变的数据类型,在创建集合之后,可以使用集合的add()方法向其添加项:
>>> numbers = 1, 2, 3
>>> numbers.add(4) # 向numbers集合中添加整数4
>>> numbers
1, 2, 3, 4
>>> numbers.add('five') # 向numbers集合中添加字符串'five'
>>> numbers
1, 2, 3, 4, 'five'
>>> numbers.add((5, 6, 7)) # 向numbers集合中添加元组(5, 6, 7)
>>> numbers
1, 2, 3, 4, (5, 6, 7), 'five'
如果向某个集合中添加已经存在的项,那么什么也不会发生:
>>> fruits = 'apple', 'strawberry', 'banana', 'watermelon'
>>> fruits
'banana', 'apple', 'watermelon', 'strawberry'
>>> fruits.add('apple') # 添加已经存在的项'apple'
>>> fruits # fruits集合并没有改变
'banana', 'apple', 'watermelon', 'strawberry'
也可以使用集合的update()方法向集合中添加项,参数必须是可迭代对象,如列表、字符串或另一个集合。类似于列表的append()方法和extend()方法,但区别是集合的update()方法总是会将可迭代对象“展开”:
>>> numbers = 1
>>> numbers
1
>>> numbers.update((5, 6, 7))
>>> numbers # 可以看出update()方法和add()方法的区别
1, 5, 6, 7
>>> numbers.update(4, 5, 6, 7, 8) # 参数为两个集合
>>> numbers
1, 4, 5, 6, 7, 8
4、集合删除项
可以使用集合的remove()方法删除某个集合中的指定项:
>>> numbers = 1, 2, 3, 5, 7
>>> numbers.remove(1)
>>> numbers
2, 3, 5, 7
>>> numbers.remove(3)
>>> numbers
2, 5, 7
如果试图删除集合中不存在的项,那么Python解释器会报错:
>>> numbers = 1, 2, 3, 5, 7
>>> numbers.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
还可以使用集合的discard()方法来删除项,它和remove()方法唯一的区别是,当试图删除不存在的项时,discard()方法并不会报错,而是什么也不会发生:
>>> numbers = 1, 2, 3, 5, 7
>>> numbers.discard(1)
>>> numbers
2, 3, 5, 7
>>> numbers.discard(3)
>>> numbers
2, 5, 7
>>> numbers.discard(4)
>>> numbers # 什么也没发生
2, 5, 7
5、检查某个项是否在集合中
集合的in操作符用于检查指定项是否在集合中,not in操作符用于检查指定项是否不在集合中:
>>> numbers = 1, 2, 3, 5, 7
>>> 1 in numbers # 1在numbers集合中,返回True
True
>>> 3 in numbers # 3在numbers集合中,返回True
True
>>> 4 in numbers # 4不在numbers集合中,返回False
False
>>> 4 not in numbers # not in是in的反向操作
True
6、查看集合的长度
集合的内建函数len()用于查看集合的长度,即集合中项的个数:
>>> empty = set()
>>> len(empty)
0
>>> numbers = 1, 2, 3, 5, 7
>>> len(numbers)
5
类中集合的 getter/setter 等价物
【中文标题】类中集合的 getter/setter 等价物【英文标题】:Equivalent of getters/setters for collections within a class 【发布时间】:2012-01-24 09:37:52 【问题描述】:我有一堂课如下:
public class Document
public List<DocumentSection> sections = new List<DocumentSection>();
...
各种问题涵盖属性需要在类内部可写但从外部只读的情况(http://***.com/questions/4662180/c-sharp-public-变量-as-writeable-inside-the-clas-but-readonly-outside-the-cl)
我想对这个集合做同样的事情 - 允许从类内添加到它,但只允许用户在它外面时迭代它。这优雅可行吗?
谢谢
【问题讨论】:
【参考方案1】:将集合公开为IEnumerable
,以便用户只能遍历它。
public class Document
private List<DocumentSection> sections;
public IEnumerable<DocumentSection> Sections
get return sections;
【讨论】:
【参考方案2】:是的,您必须隐藏 List 并且只公开 Add 方法和 IEnumerable<DocumentSection>
类型的属性:
public class Document
private List<DocumentSection> sections = new List<DocumentSection>();
public void AddSection(DocumentSection section)
sections.Add(section);
public IEnumerable<DocumentSection> Sections
get return sections;
【讨论】:
感谢一月,非常感谢。【参考方案3】:您可以将列表公开为IEnumerable<DocumentSection>
,并且仅在内部使用List
。像这样:
public class Document
public IEnumerable<DocumentSection> Sections get return list;
private List<DocumentSection> list;
【讨论】:
【参考方案4】:如果你真的想只允许迭代,你可以保持 IList 私有,但创建一个解析为 GetEnumerator() 的公共函数
【讨论】:
【参考方案5】:public class Document
private readonly List<DocumentSection> sections = new List<DocumentSection>();
public IEnumerable<DocumentSection> Sections
get
lock (this.sections)
return sections.ToList();
【讨论】:
以上是关于python中集合的特点和注意点?的主要内容,如果未能解决你的问题,请参考以下文章