精华内容
下载资源
问答
  • 为什么要序列化 内存的字典、列表、集合以及各种对象...针对于数据量比较大的列表、字典,可以采用将其加工为数据包来调用,减小文件大小;也就是一个压缩->保存->提取的一个过程。 pickle常用的4个函数 1.

    为什么要序列化

    内存中的字典、列表、集合以及各种对象,如何保存到一个文件中。之前往往是将这些对象转成字符对象然后再写入到文件中。设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列。所以必须把数据额转换为字节序列,输出到文件,这就是序列化,反之,从文件的字节 序列恢复到内存中,就是反序列化。

    pickle的优点

    针对于数据量比较大的列表、字典,可以采用将其加工为数据包来调用,减小文件大小;也就是一个压缩->保存->提取的一个过程。

    pickle常用的4个函数

    1、pickle.dump(objfileprotocol=None*fix_imports=Truebuffer_callback=None)

    把一个对象序列化以二进制写入到文件中

    写入方式wb(wb 只写打开或新建一个二进制文件;只允许写数据。)

    2、pickle.load(file*fix_imports=Trueencoding="ASCII"errors="strict"buffers=None)

    把一个序列化的对象反序列成一个对象

    读出方式rb(ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。)

    将字典写入文件,然后在从文件中读出。

    import pickle
    
    # An arbitrary collection of objects supported by pickle.
    data = {
        'a': [1, 2.0, 3, 4+6j],
        'b': ("character string", b"byte string"),
        'c': {None, True, False}
    }
    
    
    #序列化
    with open('data.pickle', 'wb') as f:
        # Pickle the 'data' dictionary using the highest protocol available.
        pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
    
    
    #反序列化
    with open('data.pickle', 'rb') as f:
        # The protocol version used is detected automatically, so we do not
        # have to specify it.
        data = pickle.load(f)
    
    print(data)   #{'a': [1, 2.0, 3, (4+6j)], 'b': ('character string', b'byte string'), 'c': {False, True, None}}
    
    
    

    将列表写入文件,然后在从文件中读出。 

    # An arbitrary collection of objects supported by pickle.
    
    data = [1,2,3,4,5,[6,7,8,9]]
    #序列化
    with open('data.pickle', 'wb') as f:
        # Pickle the 'data' dictionary using the highest protocol available.
        pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
    
    
    #反序列化
    with open('data.pickle', 'rb') as f:
        # The protocol version used is detected automatically, so we do not
        # have to specify it.
        data = pickle.load(f)
    
    print(data)   #[1, 2, 3, 4, 5, [6, 7, 8, 9]]

     

    3、pickle.dumps(objprotocol=None*fix_imports=Truebuffer_callback=None)

    对象序列化为bytes对象

    直接返回一个对象不进行存储

    4、pickle.loads(data*fix_imports=Trueencoding="ASCII"errors="strict"buffers=None)

    从bytes对象反序列化成对象

    直接返回一个对象不进行存储

    import pickle
    
    # An arbitrary collection of objects supported by pickle.
    
    data = [1,2,3,4,5,[6,7,8,9]]
    res = pickle.dumps(data)
    print(res,type(res))  #b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05]q\x01(K\x06K\x07K\x08K\tee.' <class 'bytes'>
    res = pickle.loads(res)
    print(res,type(res))  #[1, 2, 3, 4, 5, [6, 7, 8, 9]] <class 'list'>
    
    import pickle
    
    # An arbitrary collection of objects supported by pickle.
    
    data = {
        'a': [1, 2.0, 3, 4+6j],
        'b': ("character string", b"byte string"),
        'c': {None, True, False}
    }
    res = pickle.dumps(data)
    print(res,type(res))  
    # b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01]q\x02(K\x01G@\x00\x00\x00\x00\x00\x00\x00K\x03cbuiltins\ncomplex\nq\x03G@\x10\x00\x00\x00\x00\x00\x00G@\x18\x00\x00\x00\x00\x00\x00\x86q\x04Rq\x05eX\x01\x00\x00\x00bq\x06X\x10\x00\x00\x00character stringq\x07C\x0bbyte stringq\x08\x86q\tX\x01\x00\x00\x00cq\ncbuiltins\nset\nq\x0b]q\x0c(\x89\x88Ne\x85q\rRq\x0eu.' <class 'bytes'>
    res = pickle.loads(res)
    print(res,type(res)) 
    # {'a': [1, 2.0, 3, (4+6j)], 'b': ('character string', b'byte string'), 'c': {False, True, None}} <class 'dict'>

    总结:pickle这个模板不是一个安全的模块;经常使用dumps和loads。

    展开全文
  • Python核心编程第二版(中文)

    热门讨论 2015-04-23 16:40:13
    1.7 比较PythonPython与其他语言的比较) 1.8 其他实现 1.9 练习 第2章 快速入门 2.1 程序输出,print语句及“Hello World!” 2.2 程序输入和raw_input()内建函数 2.3 注释 2.4 操作符 2.5 变量和赋值...
  • Python核心编程(中文第二版)

    热门讨论 2009-10-02 12:08:14
     1.7 比较PythonPython与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“Hello World!”   2.2 程序输入和raw_input()内建函数   2.3 注释  ...
  • 页面上提供了需要执行的一口大小任务的完整列表。 致谢 cbsyst的发展受到了极大的帮助。 特别是,这些程序代表了从易错字文献找到最合适的系数公式和参数化的巨大努力。 在整个开发过程,CO2SYS还提供了宝贵的...
  • 1列表如何比较大小?(从各个列表的第一个元素开始比起,如果当前两个元素不相等,则不再比较,得出结果;如果相等,还要继续比较下去) >>> a=[1,2,3,4] >>> b=[1,2,3,4] >>> a==b >>> a=[1,2] >>> b=[1,3] >>> a==b...

    1列表如何比较大小?(从各个列表的第一个元素开始比起,如果当前两个元素不相等,则不再比较,得出结果;如果相等,还要继续比较下去)

    >>> a=[1,2,3,4]
    >>> b=[1,2,3,4]
    >>> a==b

    >>> a=[1,2]
    >>> b=[1,3]
    >>> a==b
    False



    2列表相加?(等同于列表的连接,产生一个新列表,该列表中包含两个列表的元素)

    >>> a=[1,2,3]
    >>> b=[4,5,6]
    >>> c=a+b
    >>> print(c)
    [1, 2, 3, 4, 5, 6]



    3列表乘一个数n?(生成一个列表,该列表中元素为原列表中元素重复n次,原列表不变)

    >>> a=[1,2]
    >>> b=a*3
    >>> b
    [1, 2, 1, 2, 1, 2]



    4成员关系操作符in ( not in)?(用于判断一个元素在或不在列表中)

    >>> a=[1,2,3,4,'a','b']
    >>> 'a'in a
    True
    >>> 1 in a
    True
    >>> 5 not in a
    True
    >>> 3 not in a
    False

    注in只能判断一个括号范围内的存在关系

    >>> a=[1,2,3,['a','b'],4]
    >>> 'a'in a
    False
    >>> ['a','b'] in a
    True



    5如何访问位于列表中的列表的值?(类似二元数组)

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

    所以上面的问题可以用这种方法解决

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

    >>> a[3]
    [4, 5, 6]
    >>> 4 in a[3]
    True




    6如果计算一个值在这个列表中出现了多少次?(list类对象的count方法)

    >>> a=[1,1,1,2,2,2,3,3]
    >>> a.count(1)
    3
    >>> a.count(2)
    3

    >>> a.count(3)
    2



    7如何返回指定值在列表中的索引?列表类函数的index方法

    1.list.index(值)

    2.list.index(值,开始索引,结束索引)

    注:index只能返回找到的第一个位置的索引

    >>> a=[1,2,3,4]
    >>> a.index(1)
    0
    >>> a=[1,2,3,1,2,3]
    >>> a.index(2)
    1
    >>> a.index(2,2,5)
    4




    8如何逆置整个列表?列表类对象的reverse方法

    reverse英[rɪˈvɜ:s]         vt.(使) 反转;

    >>> a=[1,2,3,4]
    >>> a.reverse()
    >>> a
    [4, 3, 2, 1]

     a=[1,2,3,'b',['1,2,3']]
    >>> a.reverse()
    >>> a
    [['1,2,3'], 'b', 3, 2, 1]



    9如何将列表排序?列表类的sort方法,没有参数时为升序

      sort [sɔ:t]       vt.将…排顺序;

    >>> a=[1,2,43,5,7,8,4,6,9,0]
    >>> a.sort()
    >>> a
    [0, 1, 2, 4, 5, 6, 7, 8, 9, 43]
    那么,如何将列表降序排列?
    1.先升序排列
    2用reverse()方法逆置列表




    10对象的赋值(对象a=对象b,其实是把对象a的名字贴在了对象b上,他们两个是一个东西)
    >>> a=[6,5,4]
    >>> b=a
    >>> a.sort()
    >>> a
    [4, 5, 6]
    >>> b
    [4, 5, 6]
    但是a[:]产生的是另外一个列表
    >>> a
    [4, 5, 6]
    >>> c=a[0:]
    >>> c
    [4, 5, 6]
    >>> a.reverse()
    >>> a
    [6, 5, 4]
    >>> c
    [4, 5, 6]



    11列表推导式?(遍历这个列表,并把所得的值存在列表中)

    格式 [关于i的表达式 for i in list]

    >>> range(0,10)
    range(0, 10)
    >>> list(range(0,10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    >>> [i*i for i in range(0,10)]    
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


    >>> [i**2 for i in range(0,11)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


    >>> list1=[]
    >>> for i in range(0,11):
    list1.append(i**2)

    >>> list1
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]



    12为什么new的值没有改变?

    >>> old=[1,2,3]
    >>> new=old
    >>> old=[6]
    >>> new
    [1, 2, 3]

    答:old指向空间[1,2,3]

    随后new 也只想这个空间

    但是后来old指向空间[6]

    new还是指向【1,2,3】这个空间,所以不变


    展开全文
  • 数据类型为字符串的数字比较大小 python将字典的值写入到txt时,中文出现了\u等乱码现象?// 将字典写入txt文件列表数据写入到txt、csv 将dict数据写入到excel 读取数据 如何判断5个表格数据是否重复,...

    目录

    1. python如何在字符串中提取数字
    2. 数据类型为字符串的数字比较大小
    3. python将字典中的值写入到txt时,中文出现了\u等乱码现象?// 将字典写入txt文件中
    4. 将列表数据写入到txt、csv中
    5. 将dict数据写入到excel中
    6. 读取数据
    7. 如何判断5个表格中数据是否重复,如果重复就删除,没有重复的数据整合到一个表格中
    8. 怎么知道程序运行的时间

    1.python如何在字符串中提取数字?

    import re
    
    words = '1.1万'
    word1 = re.sub("\D", "", words)
    print(word1)    # 11  str
    word2 = re.sub("[^0-9.]", "", words)   #保留小数点
    print(word2)         # 1.1  str
    word3 = re.findall('\d+(?:\.\d+)?', words)
    print(word3)    # ['1.1']   list
    
    1. 数据类型为字符串的数字比较大小
      两个字符串直接比较大小有时候会出现明显的错误情况,最简单的就是用eval()函数转换一下数据类型
      例如:
    if '12.5' > '5':
        print('xx')
    else:
        print('mm')      # mm
    if eval('12.5') > eval('5'):
        print('xx')
    else:
        print('mm')      # xx
    
    1. python将字典中的值写入到txt时,中文出现了\u等乱码现象?
      我发现我总是文件各种读入写出不熟,导致每次都要查博客。。。现在总结一下
      遇到上面这种情况,是因为用json.dumps()时,括号里没有设置ensure_ascii=False
      比如:
    import json
    
    content = {'bookname': '剑来', 'followers': '3202'}  
    with open('learning.txt', 'a+', encoding='utf-8') as f:
        f.write(json.dumps(content, ensure_ascii=False) + '\n')   # {"bookname": "剑来", "followers": "3202"}
        f.write(str(content) + '\n')    # {'bookname': '剑来', 'followers': '3202'}
        f.write(json.dumps(content) + '\n')  # {"bookname": "\u5251\u6765", "followers": "3202"}
    
    1. 将列表数据写入到txt、csv中
    import codecs
    import csv
    
    data = ['道爷不好惹', '123', '鬼仙之主', '456']
    with open('learning.csv', 'w+', encoding='utf-8') as f:
        f.write(str(data))       # ['道爷不好惹', '123', '鬼仙之主', '456']
    
    file_csv = codecs.open('learning.csv', 'w+', encoding='utf-8')
    result = csv.writer(file_csv, delimiter= ' ', quotechar= ' ', quoting= csv.QUOTE_MINIMAL)
    for i in data:
        result.writerow(i)
    """
    道 爷 不 好 惹
    1 2 3
    鬼 仙 之 主
    4 5 6
    """
    
    # 将list写入txt
    data = ['道爷不好惹', '123', '鬼仙之主', '456']
    with open('learning.txt', 'w+',encoding='utf-8') as f:
        for i, item in enumerate(data):
            f.write(item + '\n')
    """
    道爷不好惹
    123
    鬼仙之主
    456
    """
    
    import xlrd
    
    workbook = xlrd.open_workbook('table.xlsx')
    table = workbook.sheet_by_name('sheet1')
    bn = table.col_values(0)
    bookurl = table.col_values(1)
    

    不知道为啥xlrd今天不能用了,查了网上说使用pip uninstall xlrd 之后 再pip install xlrd==1.2.0就可以了,但我仍然装不上,明天研究一下openpyxl这个包之后再更 = =

    麻烦的是各种方法都可以用,所以经常搞混。可我只想知道一种最简单最通用的方法哎喂。

    1. 将dict数据写入到excel中
    	booklist = {'日月风华':'xxx', '陆地键仙':'xxx', '剑来':'xxx'}
    	key = list(booklist.keys())
    	value = list(booklist.values())
        result_excel = pd.DataFrame()
        result_excel['书名'] = key
        result_excel['书籍链接'] = value
        result_excel.to_excel('booklist.xlsx')
    

    在这里插入图片描述
    6. 读取数据
    为了避免麻烦,我一般用pd.read_csv(),pd.read_excel() 函数来读csv、excel数据,用

    with open('filename.txt', encoding='utf-8') as f: 
    	for line in f.readlines():
    

    一行一行读文本数据,可能涉及到items = json.loads(line) 或者用到strip()、split()函数等

    1. 如何判断5个表格中数据是否重复,如果重复就删除,没有重复的数据整合到一个表格中?
      先用xlrd读取表格中的数据得到list,然后记录list中数值与数值的索引,将该数值和索引对应的其它数值放入到一个dict中,dict以某个数值(一般选易区分的)为key,其它为value,然后用dict.setdefault(),将不在dict中的加入进去即可。

    Tips: python查找列表中某个元素的索引

    bn_index = bn.index(bookname)
    

    bn 表示一个list,bookname表示要查找的值,bn_index表示bookname的索引

    1. 怎么知道程序运行的时间
      在程序main函数下(程序运行开始前)用
    import time
    if __name__ == '__main__':
    	start_time = time.time()
    	i = 0
    	while i < 10:
    	(xxx...)
    	i += 1
    	end_time = time.time()
        print('{} run time:'.format(i), end_time - start_time)
    

    最后,贴一个用openpyxl包读excel的博客,明天琢磨一下(资料侵删
    如何用Python读写Excel文件?最便捷的3种方式

    展开全文
  • Python编程入门经典

    热门讨论 2013-10-27 14:17:39
    4.3 比较两个值的大小 51 4.4 对真值和假值取反 53 4.5 观察多个比较运算的结果 54 4.6 循环 57 4.6.1 重复执行操作 57 4.6.2 终止循环 59 4.7 处理错误 62 4.8 本章小结 64 4.9 习题 65 第5章 函数 67 5.1 将程序...
  • 深入理解Python中文版高清PDF

    热门讨论 2012-09-04 19:37:04
     1.7 比较PythonPython与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“Hello World!”   2.2 程序输入和raw_input()内建函数   2.3 ...
  • Python核心编程第二版

    热门讨论 2009-07-30 17:07:20
     1.7 比较PythonPython与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“Hello World!”   2.2 程序输入和raw_input()内建函数   2.3 注释  ...
  • Python 程序员指南(高清PDF中文版)

    热门讨论 2011-06-03 12:36:56
    本书主要讲解Python语言的基础知识、编程及应用。 本书概念和思路清晰,并对相应的概念提供了大量的编程实例,具有很高的参考和应用价值。 本书的内容深入浅出、通俗易懂,从最简单的例子着眼逐步进阶,不仅适合...
  • Python核心编程第二版(ok)

    热门讨论 2009-05-21 08:23:44
     1.7 比较PythonPython与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,1print语句及“HellocWorld!”   2.2 程序输入和raw_input()内建函数   2.3 注释  ...
  • 上一博文讲了计数排序,那么在计数排序,如果元素的范围比较大(比如在1到1亿之间),如何改造算法? 桶排序(Bucket Sort): 首先将元素分在不同的桶,再对每个桶的元素排序 桶排序的表现取决于数据的分布,也...

    桶排序

    上一博文讲了计数排序,那么在计数排序中,如果元素的范围比较大(比如在1到1亿之间),如何改造算法?
    桶排序(Bucket Sort): 首先将元素分在不同的桶中,再对每个桶中的元素排序
    桶排序的表现取决于数据的分布,也就是需要对不同的数据排序时采取不同的分桶策略
    平均情况复杂度: O(n+k)
    最坏情况时间复杂度: O(k * n^2)
    空间复杂度: O(nk)

    桶排序原理很简单,比如一个列表中元素最大值是max=100000,按照计数排序,我们需要一个100000大小的列表,但是如果使用桶排序,则我们可以将0-1000放一个桶里,然后这个桶内每次放入一个元素就进行一次冒泡排序即将桶内也排好序;将1001-2000也放一个桶…这样最大值为100000的列表只需要放入100个桶中就行了。

    代码:

    '''
    TOP: 桶排序
    author: Blue
    time: 2020-08-08
    QQ: 2458682080
    '''
    
    def bucket_sort(li, n=100, max_num=10000):
        buckets = [[] for _ in range(n)]  # 创建桶——建立n个空一维列表的二维列表
        for var in li:
            i = min(var // (max_num // n), n - 1)   # i表示var这个数放到几号桶里
            # max_num // n 表示每个桶有几个数
            # 用min是为了防止比如10000这个数出现,按道理应该放到第100个桶,但我们只有0-99号桶,所以取较小值,让10000放进99号桶
            buckets[i].append(var)  # 把var放进桶里
            for j in range(len(buckets[i])-1, 0, -1):  # 放入桶后,用该桶最后一个数往前进行冒泡排序
                if buckets[i][j] < buckets[i][j-1]:
                    buckets[i][j], buckets[i][j-1] = buckets[i][j-1], buckets[i][j]
                else:
                    break
        sorted_li = []
        for buc in buckets:
            sorted_li.extend(buc)
        return sorted_li
    
    import random
    li = [random.randint(0, 10000) for i in range(10000)]
    li = bucket_sort(li)
    print(li)
    

    结果为:

    [0, 1, 1, 1, 1, 2, 4, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 10, 10, 12, 12, 13, 15, 19, 22, 24, 25, 25, 26, 28, 28, 29, 29, 29, 30, 31, 35, 36, 37, 38, 41, 42, 42, 43, 45, 46, 51, 54, 54, 55, 57, 57, 58, 59, 60, 62, 63, 63, 66, 67, 69, 69, 69, 70, 70, 72, 75, 76, 77, 77, 79, 80, 82, 83, 84, 84, 87, 87, 89, 89, 90, 91, 91, 92, 92, 93, 93, 94, 94, 100, 100, 100, 100, 102, 104, 108, 108, 108, 108, 109, 110, 111, 113, 114, 115, 117, 119, 119, 120, 120, 121, 121, 124, 124, 125, 126, 127, 127, 128, 128, 128, 131.......]
    
    展开全文
  •  1.7 比较pythonpython与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“hello world!”   2.2 程序输入和raw_input()内建函数   2.3 注释  ...
  • 有四个数,假设我们要查找4,那么就先从第二个数字2开始,然后4比较2与的大小,如果小了就在[3,4]寻找,大了就在[1]寻找。然后再在剩下的数,取中间的数查找比较。 2、适用范围:有序列表 3、最大寻找次数:...
  •  1.7 比较pythonpython与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“hello world!”   2.2 程序输入和raw_input()内建函数   2.3 注释  ...
  • 其中MODEL_NAME对应列表如下: 模型名 MODEL_NAME albert_tiny_google_zh voidful/albert_chinese_tiny albert_small_google_zh voidful/albert_chinese_small albert_base_zh (from google) voidful/...
  • 文章列表 github上的博客与csdn的同步更新 image 技术相关的图片 javadoc 博客 sso-cookie 跨域读写cookie的例子 思维导图 和java相关的 更多干货 分布式实战(干货) spring cloud 实战(干货) ...
  • # 将每次登陆的时间存入redis的名为login_item列表中,判断列表元素个数是否已达到5并且和第一次登录时间比较是否在一个小时以内。 if r.llen('login_item') >= 5 and (time.time() - float(r.lindex('login_item...
  • 写一段程序,找出数组第k大小的数,输出数所在的位置。例如{2,4,3,4,7},第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。 3.5.3 给40亿个不重复的unsigned int的整数,...
  • 这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书使用的软件工程原则和概念以及UML图便于增强学生的...附录L 针对Python编程人员的C++知识 767
  • 手势指导页面(有些播放器有新手指导功能),离线下载的界面(该界面包含下载列表, 列表的item编辑(全选, 删除)) 用户从wifi切换到4g网络,提示网络切换弹窗界面(当网络由wifi变为4g的时候会显示) 图片广告视图(带有...
  • 后续文章和内容会不断更新到 github项目 ,欢迎关注。 目录(善用Ctrl+F) 基础入门 新手 Golang开发新手常犯的50个错误 数据类型 连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了...
  • 介绍了它无中心架构、高可用、无缝扩展等引人注目的特点,讲述了如何安装、配置cassandra及如何在其上运行实例,还介绍了对它的监控、维护和性能调优手段,同时还涉及了cassandra相关的集成工具hadoop及其类似的...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

python中列表如何比较大小

python 订阅