高效处理数据类型方法:

  1. In []: from random import randint
  2.  
  3. In []: data=[randint(-,) for _ in range()]
  4.  
  5. In []: data
  6. Out[]: [-, -, , , , -, -, , , -]
  7.  
  8. #过滤列表中的负数
  9. In []: list(filter(lambda x:x>=,data))
  10. Out[]: [, , , , ]
  11.  
  12. [for x in data if x>=]
  13. # 列表生成式解法
  14. [x for x in data if x>=]
  15.  
  16. #哪个更快,列表解析更快,远快于迭代
  17. In []: %timeit [x for x in data if x>=]
  18. ns ± 23.8 ns per loop (mean ± std. dev. of runs, loops each)
  19.  
  20. In []: %timeit filter(lambda x:x>=,data)
  21. ns ± ns per loop (mean ± std. dev. of runs, loops each)
  22.  
  23. #得到20个同学的成绩
  24. d={x:randint(,)for x in range(,)}
  25. #字典解析式,iteritems同时迭代字典,
  26. #
  27. #得到分数大于90的同学
  28. {k:v for k,v in d.items() if v>}
  29.  
  30. #集合解析
  31. In []: {x for x in s if x % ==}
  32. Out[]: {-, -, }
  33.  
  34. #为元祖中的每个元素命名,提高程序可读性
  35. #元祖存储空间小,访问速度快
  36. #定义常量
  37. NAME =
  38. AGE=
  39. SEX=
  40. EMAIL=
  41. #拆包用法,定义类似其他语言的枚举类型,也就是定义数值常量
  42. NAME,AGE,SEX,EMAIL=range()
  43.  
  44. #案例
  45. student=('Jim',,'male','jin@163.com')
  46. #name
  47. print(student[])
  48. #age
  49. print(student[])
  50. #通过常量可以优化为
  51. print(student[NAME])
  52. print(student[AGE])
  53.  
  54. #namedtuple是继承自tuple的子类,namedtuple和tuple比较有更酷的特性
  55. #namedtuple创建一个和tuple类似的对象,而且对象拥有可以访问的属性。这对象更像带有数据属性的类,不过数据属性是只读的。
  56. from collections import namedtuple
  57. Student = namedtuple('Student',['name','age','sex','email'])
  58. s=Student('Jim',,'male','jim@163.com')
  59. s.name
  60. s.age
  61.  
  62. #统计序列中元素出现的频度
  63. from random import randint
  64. data=[randint(,) for _ in range()]
  65. #创建字典{:,:,...}
  66. #方法1
  67. c=dict.fromkeys(data,)
  68. In []: for x in data:
  69. ...: c[x]+=
  70.  
  71. #方法2,统计词频
  72. from collections import Counter
  73. c2=Counter(data)#讲序列传入Counter的构造器,得到Counter对象是元素频度的字典
  74. #使用most_common统计词频
  75. In []: c2.most_common()
  76. Out[]: [(, ), (, ), (, )]
  77. #统计英文作文词频
  78. import re
  79. txt=open('emmmm.txt').read()
  80. #分割后赋给Counter
  81. c3=Counter(re.split('\W',txt))
  82. #找到频率最高的10个单词
  83. c3.most_common()
  84.  
  85. #内置函数是以c的速度运行,如sorted
  86. from random import randint
  87. d={x:randint(,) for x in 'xyzabc'}
  88. #{'a': , 'b': , 'c': , 'x': , 'y': , 'z': }
  89. # sorted(d)
  90. In []: zip(d.values(),d.keys())
  91. Out[]: <zip at 0x108b34dc8>
  92.  
  93. In []: list(zip(d.values(),d.keys()))
  94. Out[]: [(, 'x'), (, 'y'), (, 'z'), (, 'a'), (, 'b'), (, 'c')]
  95.  
  96. #快速找到多个字典中的公共键
  97. #In []: from random import randint,sample
  98.  
  99. In []: sample('abcdefg',)
  100. Out[]: ['c', 'a', 'b']
  101.  
  102. In []: sample('abcdefg',randint(,))
  103. Out[]: ['b', 'a', 'd']
  104.  
  105. In []: s1={x:randint(,)for x in sample('abcdefg',randint(,))}
  106.  
  107. In []: s1
  108. Out[]: {'a': , 'b': , 'c': , 'f': , 'g': }
  109.  
  110. In []: s1={x:randint(,)for x in sample('abcdefg',randint(,))}
  111.  
  112. In []: s1
  113. Out[]: {'b': , 'd': , 'g': }
  114.  
  115. In []: s1
  116. Out[]: {'b': , 'd': , 'g': }
  117.  
  118. In []: s2={x:randint(,)for x in sample('abcdefg',randint(,))}
  119.  
  120. In []: s3={x:randint(,)for x in sample('abcdefg',randint(,))}
  121. #for循环遍历方法,找到s2,s3都有的k
  122. In []: res=[]
  123.  
  124. In []: for k in s1:
  125. ...: if k in s2 and k in s3:
  126. ...: res.append(k
  127. ...: )
  128. ...:
  129. ...:
  130.  
  131. In []: res
  132. Out[]: ['b']
  133. #通过字典的keys()方法,找到三个字典同样的key
  134. In []: s1.keys()&s2.keys()&s3.keys()
  135. Out[]: {'b'}
  136. #通过map得到一个迭代器对象
  137. #In []: map(dict.keys,[s1,s2,s3])
  138. Out[]: <map at 0x108891b70>
  139.  
  140. In []: list(map(dict.keys,[s1,s2,s3]))
  141. Out[]:
  142. [dict_keys(['g', 'd', 'b']),
  143. dict_keys(['g', 'a', 'c', 'b', 'f']),
  144. dict_keys(['d', 'f', 'b', 'c', 'e', 'a'])]
  145. #通过reduce取出同样结果
  146. In []: from functools import reduce
  147.  
  148. In []: reduce(lambda a,b:a&b,map(dict.keys,[s1,s2,s3]))
  149. Out[]: {'b'}
  150.  
  151. #使得
  152. from time import time
  153. from random import randint
  154. from collections import OrderedDict
  155.  
  156. d=OrderedDict()
  157. players = list("ABCDEFGH")
  158. start=time()
  159. for i in range():
  160. input()
  161. p=players.pop(randint(,-i))
  162. end=time()
  163. print(i+,p,end-start)
  164. d[p]=(i+,end-start)
  165. print('')
  166. print('-'*)
  167. for k in d:
  168. print(k,d[k])
  169. #查看用户历史记录功能,标准库collections的deque,双端循环队列,存在内容中,pickle存储到文件
  170. from random import randint
  171. from collections import deque
  172. N = randint(,)
  173. history = deque([],)
  174. def guess(K):
  175. if K ==N:
  176. print('正确')
  177. return True
  178. if K < N:
  179. print('%s is less-than N'%K)
  180. else:
  181. print("%s is greater-than N"%K)
  182. return False
  183. while True:
  184. line = input("请输入一个数字:")
  185. if line.isdigit():
  186. k=int(line)
  187. history.append(k)
  188. if guess(k):
  189. break
  190. elif line =='history' or line =='h?':
  191. print(list(history))

处理数据

可迭代对象和迭代器对象:

  1. 可迭代对象和迭代器对象
  2.  
  3. 需求:从网络抓取每个城市的气温消息,显示
  4. 北京:-
  5. 黑龙江:-
  6. 上海13-
  7. 一次抓取所有城市信息,会占很大的存储空间,现在想“用时访问”,吧所有城市气温封装到一个对象里,用for迭代
  8.  
  9. 可迭代对象:
  10.  
  11. In []: l=[,,,,]
  12.  
  13. In []: s='abcde'
  14.  
  15. iter内置函数,可以得到一个迭代器对象
  16. 由可迭代对象,得到迭代器
  17.  
  18. iter(l)
  19.  
  20. In []: type(l)
  21. Out[]: list
  22.  
  23. In []: type(iter(l))
  24. Out[]: list_iterator
  25.  
  26. 可迭代对象都有__iter方法,可迭代接口
  27. 或者__getitem__序列接口
  28.  
  29. 可迭代对象可以通过next()取值
  30.  
  31. In []: t=iter(l)
  32.  
  33. In []: next(t)
  34. Out[]:
  35.  
  36. In []: next(t)
  37. Out[]:
  38.  
  39. In []: next(t)
  40. Out[]:
  41.  
  42. In []: next(t)
  43. Out[]:
  44.  
  45. In []: next(t)
  46. Out[]:
  47.  
  48. In []: next(t)
  49. ---------------------------------------------------------------------------
  50. StopIteration Traceback (most recent call last)
  51. <ipython-input--f843efe259be> in <module>()
  52. ----> next(t)
  53.  
  54. StopIteration:

可迭代与迭代器对象

读写取excel文件

Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的计算机编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。

  1. import xlrd
  2. #打开excel文件,创建一个workbook对象,book对象也就是s11.xlsx文件,表含有sheet名
  3. rbook=xlrd.open_workbook('/Users/yuchao/s11.xlsx')
  4. #sheets方法返回对象列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
  5. rbook.sheets()
  6. rsheet=rbook.sheet_by_index()
  7. #访问行数
  8. rows=rsheet.nrows
  9. #访问列数
  10. cols=rsheet.ncols
  11. print('行数:',rows,'列数',cols)
  12. #通过cell的位置坐标取得cell值
  13. cell=rsheet.cell(,)
  14. print('0,0坐标的值是:',cell.value)
  15. #取得第二行的值,参数是(行数,起点,终点)
  16. row1=rsheet.row_values()
  17. print('第一行的值是:',row1)

xlrd使用方法

  1. # -*- coding:utf- -*-
  2. # Author : yuchao
  3. # Data : // :
  4.  
  5. import xlrd, xlwt
  6.  
  7. rbook = xlrd.open_workbook('/Users/yuchao/s11.xlsx')
  8. rsheet = rbook.sheet_by_index() # 取得sheet对象1
  9. # 列数
  10. nc = rsheet.ncols
  11. # 写入一条数据
  12. rsheet.put_cell(, nc, xlrd.XL_CELL_TEXT, '总分', None)
  13.  
  14. # 遍历数据的行数
  15. for row in range(, rsheet.nrows):
  16. # 求和每一行数据
  17. t = sum(rsheet.row_values(row, ))
  18. rsheet.put_cell(row, nc, xlrd.XL_CELL_NUMBER, t, None)
  19. #创建文档对象
  20. wbook = xlwt.Workbook()
  21. wsheet = wbook.add_sheet(rsheet.name)
  22. #设置样式
  23. style = xlwt.easyxf('align: vertical center, horizontal center')
  24. #遍历每一行
  25. for r in range(rsheet.nrows):
  26. #每一列
  27. for c in range(rsheet.ncols):
  28. wsheet.write(r,c,rsheet.cell_value(r,c),style)
  29. wbook.save('/Users/yuchao/s11_bak.xlsx')

xlwt修改excel

  1. import xlrd
  2. from xlrd.book import Book
  3. from xlrd.sheet import Sheet
  4. from xlrd.sheet import Cell
  5.  
  6. workbook = xlrd.open_workbook('/Users/yuchao/s11.xlsx')
  7.  
  8. sheet_names = workbook.sheet_names()
  9.  
  10. # sheet = workbook.sheet_by_name('工作表1')
  11. sheet = workbook.sheet_by_index()
  12.  
  13. # 循环Excel文件的所有行
  14. for row in sheet.get_rows():
  15. # 循环一行的所有列
  16. for col in row:
  17. # 获取一个单元格中的值
  18. print(col.value)

读取excel

Python3编程技巧的更多相关文章

  1. python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据

    一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...

  2. Python3实用编程技巧进阶 ☝☝☝

    Python3实用编程技巧进阶  ☝☝☝ 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等 ...

  3. Python3实用编程技巧进阶✍✍✍

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  4. Python3实用编程技巧进阶

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  5. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  6. 豆瓣工程师为你解答关于 Python3 编程方面的问题

    Python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣.使用Python会遇到这样的问题:什么时候该用多进程?怎样提高代码执行效率?Flask为什么流行?学习Pyt ...

  7. js异步编程技巧一

    异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...

  8. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  9. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...

随机推荐

  1. Hive基础之Hive的存储类型

    Hive常用的存储类型有: 1.TextFile: Hive默认的存储类型:文件大占用空间大,未压缩,查询慢: 2.Sequence File:将属于以<KEY,VALUE>的形式序列化到 ...

  2. storm的定时任务

    应用场景: 第一种方法 参考代码StormTopologyTimer1.java package yehua.storm; import java.util.Map; import org.apach ...

  3. Linux内存管理大图(第三稿)

    http://bbs.chinaunix.net/thread-2018659-2-1.html 描述讨论在http://bbs.chinaunix.net/thread-3760371-1-1.ht ...

  4. django (装饰器,母版继承,自定义,request对象,response对象)

     1. 装饰器  1.    def wrapper(fn):    def inner(*args,**kwargs):     执行被装饰函数之前的操作     ret = fn(*args,** ...

  5. 深入分析Java Web技术内幕 修订版 pdf

    百度网盘:http://pan.baidu.com/s/1slHCCw9

  6. laravel5.3的多用户登录,经过验证laravel5.4可用【转帖】

    简介 在底层代码中,Laravel 的认证组件由 guards 和 providers组成,Guard 定义了用户在每个请求中如何实现认证,例如,Laravel 通过 session guard来维护 ...

  7. jmap Exception in thread "main" java.io.IOException: 拒绝访问。

    环境: 现有一个独立运行的系统S(有独立的jre,但是没jdk),现想通过jmap导出其内存堆栈信息.于是另外安装一个jdk.可是jdk的版本跟S系统的jre不能对应上.出了很多错误. 总是报错: C ...

  8. 22.OGNL与ValueStack(VS)-默认类Math的访问

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在loginSuc.jsp中增加如下代码: 调用Math类中的静态方法:&l ...

  9. CAAnimation临时取消动画,永久取消动画

    //临时取消动画 [CATransaction begin]; [CATransaction setDisableActions:YES]; mMyLayer.strokeEnd = 0; [CATr ...

  10. Jquery和Ajax

    jQuery 是一个 JavaScript 函数库.JavaScript 是 HTML5 以及所有现代浏览器中的默认脚本语言! jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 ...