集合中的方法

  集合中的方法:利用set()创建的集合是可变集合,它的类型是不可哈希(unhashable)的。对于这句话的理解是,set()创建的集合,整体上是可变的,可以增、删;但集合中的元素(个体)是不可变(hashable)的,不能被修改,且集合中的元素不能是列表、字典等可变类型的对象。

  add()方法:向集合中增加一个元素。如果要增加的元素已存在于集合中,则什么也不做。add()方法必须传入一个明确的不可变的参数,因为集合是无序的,所以元素会被加到集合的任意位置。

>>> a = set([1, 2, ‘q‘])
>>> a
{1, 2, ‘q‘}
>>> a.add(6)    # 增加一个整数
>>> a
{1, 2, 6, ‘q‘}
>>> a.add(‘www‘)    # 增加一个整数
>>> a
{1, 2, ‘www‘, 6, ‘q‘}
>>> a.add((‘s‘, 7))    # 增加一个整数
>>> a
{1, 2, ‘www‘, 6, ‘q‘, (‘s‘, 7)}
>>> a.add({1, 0, ‘r‘})    # 增加的元素必须是hashable的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: ‘set‘
>>> a.add([2, 7])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: ‘list‘
>>> a.add({‘A‘:99})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: ‘dict‘


  update()方法:合并集合或其他不可变的对象到另一个集合中,以更新该集合。

>>> set1 = {1, 3, ‘a‘}
>>> set2 = {‘b‘, ‘A‘}
>>> set1.update(set2)    # 合并集合
>>> set1    # set1被修改
{‘a‘, 1, 3, ‘A‘, ‘b‘}
>>> set2    # set2不变
{‘A‘, ‘b‘}
>>> set2.update(‘Java‘)    # 还可合并其他不可变类型的对象,如字符串
>>> set2
{‘a‘, ‘J‘, ‘A‘, ‘v‘, ‘b‘}
>>> set2.update((‘g‘, 9))    # 如元组
>>> set2
{‘A‘, 9, ‘v‘, ‘a‘, ‘g‘, ‘J‘, ‘b‘}


  pop()方法:删除集合中的一个元素。此方法没有参数,是随机删除集合中的一个元素,并将此元素返回。当集合为空时,若继续删除,则报错。

>>> set1 = {3, ‘A‘}
>>> set1.pop()    # 不传参数,随机删除一个元素,并返回
3
>>> set1.pop()
‘A‘
>>> set1.pop()    # 集合为空时,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: ‘pop from an empty set‘

  remove方法:删除集合中的一个指定的元素。此方法必须提供一个参数,该参数即为要删除的元素,不返回任何值,只是在原地修改集合。若指定的要删除的元素不存在于集合中,则报错。

>>> set1 = {3, ‘A‘}
>>> set1.remove(‘A‘)    # 删除指定元素,没有任何返回值
>>> set1    # 原地修改集合
{3}
>>> set1.remove(6)    # 若要删除的元素不存在,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 6

  discard()方法:作用与用法同remove()方法,区别在于若要删除的对象不存在于集合中,则什么也不做。

>>> set1 = {3, ‘A‘}
>>> set1.discard(‘A‘)    # 删除指定元素,没有任何返回值
>>> set1    # 原地修改集合
{3}
>>> set1.discard(‘B‘)    # 若要删除的元素不存在,则什么也不做

  clear()方法:清空集合。清空集合中的所有元素,清空后的集合对象依然存在,只是变成一个空集合。

>>> set1 = {3, ‘A‘}
>>> set1.clear()    # 清空集合,不返回任何值
>>> set1    # 清空后的集合对象依然存在,只是变成一个空集合
set()

  del:删除集合。集合对象将完全被删除,集合对象将不存在于内存中了。

>>> set1 = {3, ‘A‘}
>>> del set1    # 完全删除集合对象
>>> set1    # 被删除的集合对象不再存在
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name ‘set1‘ is not defined


  不变的集合:以set()创建的集合都是可变几何,集合对象可以被原地修改,即集合对象时不可哈希(unhashable)的。以frozenset()创建的集合则是不可变的,集合对象不能实现增加或删除,即可哈希(hashable)的。此时,set中的增加或删除元素的方法在frozenset中都没有。

>>> f_set = frozenset(‘python‘)
>>> f_set
frozenset({‘t‘, ‘h‘, ‘y‘, ‘n‘, ‘p‘, ‘o‘})
>>> f_set.add(3)    # 不能增加元素
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: ‘frozenset‘ object has no attribute ‘add‘


集合运算

         元素与集合的关系:元素与集合只有一种关系,元素要么属于某个集合,要么不属于。

>>> set1 = set(‘python‘)
>>> set1
{‘t‘, ‘h‘, ‘y‘, ‘n‘, ‘p‘, ‘o‘}
>>> ‘t‘ in set1    # 元素属于集合
True
>>> ‘m‘ not in set1    # 元素不属于集合
True

  集合与集合的关系:假设有两个集合A和B。

A是否等于B,即两个集合的元素是否完全一样。

>>> A = set(‘python‘)
>>> B = set(‘python‘)
>>> A == B    # 判断A和B是否相等
True
>>> A != B
False

    A是否是B的子集,或B是否是A的超集。

>>> A = set(‘python‘)
>>> A
{‘t‘, ‘h‘, ‘y‘, ‘n‘, ‘p‘, ‘o‘}
>>> B = set(‘python23‘)
>>> B
{‘2‘, ‘t‘, ‘h‘, ‘y‘, ‘3‘, ‘n‘, ‘p‘, ‘o‘}
>>> A < B    # 判断A是否是B的子集
True
>>> A.issubset(B)    # 判断A是否是B的子集
True
>>> B > A    # 判断B是否是A的超集
True
>>> B.issuperset(A)    # 判断B是否是A的超集
True

    A和B的并集。这个结果是生成一个新的对象,原有的集合没有改变。

>>> A = set(‘pyt‘)
>>> B = set(‘hon2‘)
>>> A | B    # A和B的并集
{‘2‘, ‘t‘, ‘h‘, ‘n‘, ‘y‘, ‘p‘, ‘o‘}
>>> A.union(B)    # A和B的并集
{‘2‘, ‘t‘, ‘h‘, ‘n‘, ‘y‘, ‘p‘, ‘o‘}
>>> A    # 原有的集合没有改变
{‘t‘, ‘y‘, ‘p‘}
>>> B
{‘2‘, ‘h‘, ‘n‘, ‘o‘}

    A和B的交集。这个结果是生成一个新的对象,原有的集合没有改变。

>>> A = {1, ‘e‘, ‘f‘, ‘d‘}
>>> B = {1, ‘w‘, ‘f‘}
>>> A & B    # A和B的交集
{1, ‘f‘}
>>> A.intersection(B)    # A和B的交集
{1, ‘f‘}
>>> A    # 原有的集合没有改变
{1, ‘e‘, ‘d‘, ‘f‘}
>>> B
{1, ‘w‘, ‘f‘}

    A相对于B的差(补)。即A相对于B的不同的部分元素。也是生成一个新的对象,原有的集合没有改变。

>>> A = {1, ‘e‘, ‘f‘, ‘d‘}
>>> B = {1, ‘w‘, ‘f‘}
>>> A – B    # A相对于B的差(补)集
{‘e‘, ‘d‘}
>>> A.difference(B)    # A相对于B的差(补)集
{‘e‘, ‘d‘}
>>> A    # 原有的集合没有改变
{1, ‘e‘, ‘d‘, ‘f‘}
>>> B
{1, ‘w‘, ‘f‘}

A和B的对称差集。即A相对于B的不同的部分元素和B相对于A的不同的部分元素的并集。

>>> A = {1, ‘e‘, ‘f‘, ‘d‘}
>>> B = {1, ‘w‘, ‘f‘}
>>> A – B    # A相对于B的不同的部分元素
{‘e‘, ‘d‘}
>>> B – A    # B相对于A的不同的部分元素
{‘w‘}
>>> A.symmetric_difference(B)    # A和B的对称差集
{‘e‘, ‘w‘, ‘d‘}

>= {1, ‘e‘, ‘f‘, ‘d‘}

>>> B = {1, ‘w‘, ‘f‘}

>>> A – B    # A相对于B的差(补)集

{‘e‘, ‘d‘}

>>> A.difference(B)   
# A相对于B的差(补)集

{‘e‘, ‘d‘}

>>> A    # 原有的集合没有改变

{1, ‘e‘, ‘d‘, ‘f‘}

>>> B

{1, ‘w‘, ‘f‘}

原文地址:https://www.cnblogs.com/wgbo/p/9577512.html

时间: 2024-11-07 18:39:18

集合中的方法的相关文章

Map集合中value()方法与keySet()、entrySet()区别

http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键,再根据get方法.获取每一个键对应的值. keySet():迭代后只能通过get()取key entrySet(): Set<Map.Entry<K,V>> entrySet(

Java Collection集合中的iterator方法

Iterator接口的概述 /** * java.util.Iterator接口:选代器(对集合进行遍历) * 有两个常用的方法 * boolean hasNext() * 如果仍有元素可以迭代,则返回true. * 即判断集合中还有没有下ー个元素,有就返回true,没有就返回 false * E next() * 返回送代的下一个元素. * 即取出集合中的下一个元素 * iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象. * 获取实现类的方式比较特

map集合中value()、keySet()、entrySet()区别

在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键,再根据get方法.获取每一个键对应的值. keySet():迭代后只能通过get()取key entrySet(): Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图. Map.Entry表示映射关系.entrySet():迭

HashSet集合的add()方法的源码

interface Collection { ... } interface Set extends Collection { ... } class HashSet implements Set { private static final Object PRESENT = new Object(); private transient HashMap<E,Object> map; public HashSet() { map = new HashMap<>(); } publi

使用Linq求和方法Sum计算集合中多个元素和时应该注意的性能问题

提出问题 本文使用下面的实例来说明问题,以下是实例的完整代码. //************************************************************ // // Sum应用示例代码 // // Author:三五月儿 // // Date:2014/09/10 // // http://blog.csdn.net/yl2isoft // //**********************************************************

C#集合中的Add与AddRange方法

C#.NET的集合主要位于System.Collections和System.Collections.Generic(泛型)这两个namespace中. 1.System.Collections 比如ArrayList,其Add(继承自接口IList)和AddRange方法可用于想集合中添加元素. 代码示例: (1)Add:添加单个元素 ArrayList myAL = new ArrayList(); myAL.Add( "The" ); myAL.Add( "quick&

java集合_collection 中的方法 通过Allaylist来体现

import java.util.*; /* Collection定义了集合框架的共性功能.1,添加    add(e);    addAll(collection); 2,删除    remove(e);    removeAll(collection);     clear(); 3,判断.    contains(e);    isEmpty(); 4,获取    iterator();    size(); 5,获取交集.    retainAll(); 6,集合变数组.    toAr

Iterator的remove方法可保证从源集合中安全地删除对象(转)

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorTest{ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Test1"); list.add("Test2&qu

[ jquery 过滤器 siblings(expr) ] 此方法用于在选择器的基础之上搜索取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合,可以用可选的表达式进行筛选

此方法用于在选择器的基础之上搜索取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合,可以用可选的表达式进行筛选 实例: <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='