精华内容
下载资源
问答
  • 你有一个误解,hash算法针对元素的内容,并不是针对指针,所以指针不变不等于可hash。如果你想深究细节话,可以看tuple源码:static Py_hash_ttuplehash(PyTupleObject *v){Py_uhash_t x; /* Unsigned for ...

    你有一个误解,hash算法针对的是元素的内容,并不是针对指针,所以指针不变不等于可hash。

    如果你想深究细节的话,可以看tuple的源码:

    static Py_hash_t

    tuplehash(PyTupleObject *v)

    {

    Py_uhash_t x; /* Unsigned for defined overflow behavior. */

    Py_hash_t y;

    Py_ssize_t len = Py_SIZE(v);

    PyObject **p;

    Py_uhash_t mult = _PyHASH_MULTIPLIER;

    x = 0x345678UL;

    p = v->ob_item;

    while (--len >= 0) {

    y = PyObject_Hash(*p++);

    if (y == -1)

    return -1;

    x = (x ^ y) * mult;

    /* the cast might truncate len; that doesn"t change hash stability */

    mult += (Py_hash_t)(82520UL + len + len);

    }

    x += 97531UL;

    if (x == (Py_uhash_t)-1)

    x = -2;

    return x;

    }

    注意这里有一个循环,tuple会对其中每个元素调用PyObject_Hash,将结果进行异或运算再加上一个常量作为整个tuple的hash。

    如果tuple中有一个元素是list,那么PyObject_Hash将调用list的hash算法,然而list定义就表明它根本不实现hash:

    PyTypeObject PyList_Type = {

    PyVarObject_HEAD_INIT(&PyType_Type, 0)

    "list",

    sizeof(PyListObject),

    0,

    (destructor)list_dealloc, /* tp_dealloc */

    0, /* tp_print */

    0, /* tp_getattr */

    0, /* tp_setattr */

    0, /* tp_reserved */

    (reprfunc)list_repr, /* tp_repr */

    0, /* tp_as_number */

    &list_as_sequence, /* tp_as_sequence */

    &list_as_mapping, /* tp_as_mapping */

    PyObject_HashNotImplemented, /* tp_hash */

    ...

    再看 PyObject_HashNotImplemented 的实现:

    Py_hash_t

    PyObject_HashNotImplemented(PyObject *v)

    {

    PyErr_Format(PyExc_TypeError, "unhashable type: "%.200s"",

    Py_TYPE(v)->tp_name);

    return -1;

    }

    这个信息很眼熟吧?

    结论就是,只要tuple中有一个元素是不可hash的(不限于list),那么整个tuple都是不可hash的。

    展开全文
  • 我们今天所要讲python集合中,添加元素的两种方法就可以这样理解。一个是整体加入,另一个是拆分加入,下面我们一起看看具体使用吧。 集合添加有两种方式,分别是add和update。但是它们在添加元素时是由区别...
  • 主要介绍了Python通过递归遍历出集合中所有元素的方法,实例分析了Python遍历集合元素的技巧,具有一定参考借鉴价值,需要朋友可以参考下
  • #定义一个元组(tuple), tuple=("zhangsan","lisi","wangwu ") #定义一个元组 ...#集合(set)定义: ''' 通过set(参数)函数定义 set=set([]) set=set(()) set=set...
    #定义一个元组(tuple),
    tuple=("zhangsan","lisi","wangwu ")  #定义一个元组
    #元组不能进行增删改,只有count方法和index方法
    tuple.count("zhangsan")
    tuple.index("zhangsan")
    #集合(set)的定义:
    '''
    通过set(参数)函数定义
    set=set([])
    set=set(())
    set=set({"":""})
    通过{}定义
    注意:通过set()函数定义集合的时候参数只能是一个字符或者一个数字,或者一个列表,或者一个字典
         或者一个元组
         然而通过{}定义一个集合的时候,可以是多个数据
    '''
    set1=set(["zhangsan","lisi","wangwu"])
    set2=set(("zhangsan","lisi","wangwu"))
    set3=set({"01":"zhangsan","02":"lisi"})
    set4={"zhangsna","wangwu","lisi","like"}
    print(set1,set2,set3,set4)
    set1.add("nihao")
    set2.add("hello")
    set4.add("123")
    print("----------------------------")
    print(set1,set2,set4)
    展开全文
  • 今天小编就为大家分享一篇python random从集合中随机选择元素的方法,具有很好参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python列表--查找集合中重复元素的个数


    方法一:

    >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4]

    >>> myset = set(mylist)

    >>> for item in myset:

             print("the %d has found %d" %(item,mylist.count(item)))

     

    the 1 has found 1

    the 2 has found 4

    the 3 has found 3

    the 4 has found 4

     

    方法二:

    >>> from collections import Counter

    >>> Counter([1,2,2,2,2,3,3,3,4,4,4,4])

    Counter({2: 4, 4: 4, 3: 3, 1: 1})

     

    方法三:

    >>> List=[1,2,2,2,2,3,3,3,4,4,4,4]

    >>> a = {}

    >>> for i in List:

             if List.count(i)>1:

                       a[i] = List.count(i)

            

    >>> print (a)

     

    参考资料:

    http://www.jb51.net/article/53911.htm


    展开全文
  • Python中集合使用,去除重复元素、创建集合、列表中去除重复元素、add()在集合中添加元素方法、remove()删除元素方法使用 1.集合中元素不会重复。例如: >>> num2 = {1,2,3,4,5,5,4,3,2} >>> ...

    Python中集合的使用,去除重复元素、创建集合、列表中去除重复元素、add()在集合中添加元素方法、remove()删除元素方法的使用

    1.集合中元素不会重复。例如:

    >>> num2 = {1,2,3,4,5,5,4,3,2}
    >>> num2
    {1, 2, 3, 4, 5}
    

    2.创建集合的两种方法:

    (1)直接把一堆元素用括号括起来;

    (2)使用set()工厂函数。

    3.列表中去除重复的元素

    (1)可以使用set方法:

    >>> set1 = set([1,2,3,4,5,5])
    >>> set1
    {1, 2, 3, 4, 5}
    

    (2)也可以使用临时变量,如果列表中有重复的元素,则不重复添加到temp中。例如:

    >>> num1 = [1,2,3,4,5,5,3,1,0]
    >>> temp = []
    >>> for each in num1:
    	if each not in temp:
    		temp.append(each)
    
    		
    >>> temp
    [1, 2, 3, 4, 5, 0]
    		
    

    (3)还可以使用list(set())方法,去除重复元素。但是用list会自动排序,如果程序关注原始的元素先后顺序,则需要注意是否使用该方法。例如:

    >>> num1 = [1,2,3,4,5,5,3,1,0]
    >>> num1 = list(set(num1))
    >>> num1
    [0, 1, 2, 3, 4, 5]
    

    4.add()方法的使用

    在集合中添加元素

    >>> num2
    {1, 2, 3, 4, 5}
    >>> num2.add(6)
    >>> num2
    {1, 2, 3, 4, 5, 6}
    

    5.remove()方法的使用

    在集合中删除元素

    >>> num2
    {1, 2, 3, 4, 5, 6}
    >>> num2.remove(4)
    >>> num2
    {1, 2, 3, 5, 6}
    
    展开全文
  • python random 从集合中随机选择元素

    万次阅读 2018-03-08 15:26:23
    使用python random模块choice方法随机选择某个元素 foo = ['a', 'b', 'c', 'd', 'e'] ...使用python random模块sample函数从列表随机选择一组元素 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sli...
  • user = u.add(u1) #把u1对象加入集合中,把但其返回值为None,user为None print(user) #输出结果为None print(u) #输出集合 u for obj in u: print(obj.name) #输出结果为tom u.add(u2) #把u2对象加入集合中 for ...
  • 191125 python 集合元素的删除(删)

    千次阅读 2019-11-27 09:27:45
    pop() 方法用于随机删除并返回集合中的第一个元素,如果集合为空则抛异常。 >>>...remove()方法删除集合中的元素,如果指定的元素不存在则抛异常。 >>> settest = {'a','b','c'...
  • Python集合

    2021-01-20 03:31:35
    集合不同于列表和元组类型,集合存储的元素是无序且不能重复的,同数学中的集合一样,集合可以执行集合的并、交、差运算。 集合有两种不同的类型,可变集合和不可变集合,可变集合可以添加或删除元素,但可变集合所...
  • 如何在集合中把另外一个集合当做一个元素存储? 写课题时候用到了python这个特征,记录一下。 python的重要特征就是,万物皆对象。 所以python的集合中可以放任何对象。 nums = [1,2,3,4,5] memory = [] memory....
  • Python 集合元素及操作

    2020-05-04 21:56:41
    集合是多个元素的无序组合,每个元素唯一(可以用来对其他数据类型去重),且集合中的每一个元素都是不可变元素,例如整数、浮点数、元组等; 集合用{}表示,元素间用逗号分隔,建立一个集合可以用{}和set 例如 a={1...
  • Python 集合集合运算

    万次阅读 多人点赞 2019-01-14 10:32:55
    了解 Python 集合: 它们是什么,如何创建它们,何时使用它们,什么是内置函数,以及它们与集合论操作的...它们之间主要的区别在于,集合不同于列表或元组,集合中的每一个元素不能出现多次,并且是无序存储的。 P...
  • python中的集合

    2021-05-30 18:48:25
    集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重。 定义一个空集合 set1 = set() 注意以下写法为一个空字典,为空默认是字典,如果有数据在根据格式判断 set2 = {} 添加元素(add,...
  • 方式1:如果两个列表有重复元素的 from collections import Counter print(list((Counter([0, 0, 0, 1, 2, 3]) & Counter([0, 0, 0, 3, 4, 5, 6])).elements())) 结果:[0, 0, 0, 3] 方式2:如果两个列表...
  • python集合的用法

    2020-03-11 21:52:51
    3.集合中的数据元素有限制,必须是不可变的数据类型, 元组(元组中有可变类型的元素,这样的元组也不能作为集合的元素)、字符串可以作为集合元素,集合、列表、字典不可以作为集合的元素 创建集合 创建空集合 &...
  • python的集合

    2021-05-28 19:32:36
    集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重。 定义一个空集合 set1 = set() 注意以下写法为一个空字典,为空默认是字典,如果有数据在根据格式判断 set2 = {} 二.python集合的格式 ...
  • Python中的集合

    2018-01-27 14:45:30
    集合中的元素只包含值。需注意两点  (1):集合中的元素是无序的。  (2):每个元素是唯一的。 二:创建集合  语法: set_name = set() 添加:用set_name.add() 代码:  填充集合: 语法:set_name...
  • python集合

    2021-03-23 13:41:41
    集合中填加减元素 前言 一、什么是集合? 集合是将多个元素集中在一起,具有共同性质,一般用{ }将其聚集。 二、Python中有关集合问题 1.集合运用 代码如下(示例): a={1,2,3,4,5} b={3,4,5,6,7,8,9,10} ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,640
精华内容 3,056
关键字:

python集合中的元素

python 订阅