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 

    >>> 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) 

    >>> numbers = 1, 2, 3, 5, 7 

    >>> len(numbers) 

类中集合的 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&lt;DocumentSection&gt; 类型的属性:

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&lt;DocumentSection&gt;,并且仅在内部使用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中集合的特点和注意点?的主要内容,如果未能解决你的问题,请参考以下文章

python中集合的用法

hibernate 中集合的保存

python 中集合的属性

Python3中集合的混合使用

python中集合和字典的区别

Python语法注意点