一、set

特点:

   set是一个无序且不重复的元素集合访问速度快;天生解决元素重复问题

方法:

初始化

>>> s1 = set()
>>> print(type(s1))
<class 'set'>

add()  增加元素

>>> s1.add('tom')
>>> print(s1)
{'tom'}

clear()  清空

>>> s1.clear()
>>> print(s1)
set()

差集

  循环老的序列,只要某一个元素在原序列,有就删除。对比自己没有的

difference()  对比,显示不同的部分

Return the difference of two or more sets as a new set.

返回不同的部分生成新的集合。

>>> s1  
{1, 2, 3, 4, 'haha'}
>>> s2 = s1.difference(['haha'])
>>> s2
{1, 2, 3, 4}

difference_update()  对比,并将修改原集合,不生成新的集合

>>> s1  
{1, 2, 3, 4, 'haha'}

>>> s3 = s1.difference_update(['haha'])
>>> s1
{1, 2, 3, 4}
>>> s3
>>>

difference和differentce_update的区别:

  一个是生成新的set

  删除当前set中包含在new set里的元素

dicard()  移除

>>> s1.discard(1)
>>> s1
{2, 3, 4}

intersection()  取交集,生成新set

>>> s1
{1, 2, 3, 4, 'tom', 'cow', 'cat'}
>>> s3 = s1.intersection(['tom','cat'])
>>> s3
{'cat', 'tom'}

intersetion_update()  取交集,修改原来set

>>> s3 = s1.intersection_update(['tom','cat'])
>>> s3     #说明没有生成新的set
>>> s1
{'cat', 'tom'}  #修改原set

isdisjonint()  如果没有交集,返回True

>>> s1
{'tom', 1, 2, 3, 4, 'cat', 'pig'}
>>> s3
{'haha'}
>>> s1.isdisjoint(s3)
True

issubset()  是否是子集

>>> s1
{'tom', 1, 2, 3, 4, 'cat', 'pig'}
>>> s2
{'tom', 3}
>>> s2.issubset(s1)
True

s1.issuperset(s2)  是否是父集;s2是否是s1的子集,如果是则返回True,否则返回False

>>> s1
{'tom', 1, 2, 3, 4, 'cat', 'pig'}
>>> s2
{'tom', 3}
>>> s1.issuperset(s2)
True

pop()  移除;移除的同时并获取这个值

>>> s1
{2, 3, 4, 'cat', 'pig'}
>>> ret = s1.pop()
>>> ret
2
{3, 4, 'cat', 'pig'}

remove()  指定移除;没有返回值

>>> s1.remove('pig')
>>> s1
{3, 4, 'cat'}

对称差

  循环两次,对比前后set的不同。

symmetric_difference()  差集,并获取新对象

>>> s1
{3, 4, 'cat'}
>>> s2
{'tom', 3}
>>> s1.symmetric_difference(s2)
{'tom', 'cat', 4}

symmetric_difference_update()  差集,改变原来;对比两个集合,取不同部分返回给原来的集合

>>> s1 = set('abcd')
>>> s2 = set('bcdf')
>>> s1.symmetric_difference_update(s2)
>>> s1
{'f', 'a'}
>>> s2
{'b', 'f', 'c', 'd'}

union()  并集

>>> s2 = set('bcdf')
>>> s1 = set('abcd')
>>> s1.union(s2)
{'b', 'a', 'd', 'c', 'f'}

update()  更新

>>> s1.update([2])
>>> s1
{'b', 2, 'a', 'h', 'd', 'c'}

二、collection系列

1、计数器

首先需要导入 collections模块

Counter()  统计

import collections

>>> st1 = collections.Counter('asdasdqwcadfqwqwfadf')
>>> st1
Counter({'a': 4, 'd': 4, 'f': 3, 'q': 3, 'w': 3, 's': 2, 'c': 1})

most_common()   取出出现前X个

>>> print(st1.most_common(4))
[('a', 4), ('d', 4), ('f', 3), ('q', 3)]

>>> for k in st1.elements():
...     print(k)
...
c
a
a

.......

>>> for k,v in st1.items():
...     print(k,v)
...
c 1
a 4
f 3
q 3
w 3
s 2
d 4

  elements,等于原生的值。传入的是什么就是什么;

  st1,就是处理过封装过的数据。

update()  增加

>>> st1 = collections.Counter('asdasdasdasdsadasqweqw')
>>> st1
Counter({'a': 6, 's': 6, 'd': 5, 'q': 2, 'w': 2, 'e': 1})
>>> st1.update(['tom','a','asd'])
>>> st1
Counter({'a': 7, 's': 6, 'd': 5, 'q': 2, 'w': 2, 'tom': 1, 'asd': 1, 'e': 1})

subtract()  删除

  如果存在就减1,不存在为-1

>>> st1 = collections.Counter('aabbccddeef')
>>> st1
Counter({'b': 2, 'e': 2, 'c': 2, 'a': 2, 'd': 2, 'f': 1})
>>> st1.subtract(['a','dd'])
>>> st1
Counter({'b': 2, 'e': 2, 'c': 2, 'd': 2, 'f': 1, 'a': 0, 'dd': -1})

2、有序字典

>>> dic = collections.OrderedDict()
>>> dic = dict()
>>> dic['k1'] = 'aa'
>>> dic['k2'] = 'bb'
>>> dic['k3'] = 'cc'
>>> dic
{'k2': 'bb', 'k1': 'aa', 'k3': 'cc'}

move_to_end()  移动一个到最后面
>>> dic = collections.OrderedDict()
>>> dic['k1'] = 'aa'
>>> dic['k2'] = 'bb'
>>> dic['k3'] = 'cc'

>>>dic.move_to_end('k1')

OrderedDict([('k2', 'bb'), ('k3', 'cc'), ('k1', 'aa')])

pop()  删除

>>> dic.pop('k1')
'aa'
>>> dic
OrderedDict([('k2', 'bb'), ('k3', 'cc')])

update()  增加

>>> dic.update({'k1':'1111','k100':'100'})
>>> dic
OrderedDict([('k2', 'bb'), ('k3', 'cc'), ('k1', '1111'), ('k100', '100')])

3、默认字典

>>> dic = collections.defaultdict(list)
>>> dic['k1'].append('tom')
>>> dic
defaultdict(<class 'list'>, {'k1': ['tom']})

from collections import defaultdicevalues = [11,22,33,44,55,66,77,88,99,]

my_dict = defaultdict(list)

my_dict = {}

for value in values:

  if value > 66:

    my_dict['k1'].append(value)

  else:

    my_dict[''k2].append(value)

4、可命名元组

>>> MytupleClass = collections.namedtuple('MytupleClass',['x','y','z'])
>>> st1 = MytupleClass(11,22,33)

>>> print(st1.x)
11

>>> print(st1.y)

22

>>> print(st1.z)
33

5、队列

>>> d = collections.deque()
>>> d
deque([])
>>> d.append('1')
>>> d
deque(['1'])
>>> d.appendleft('11')
>>> d.appendleft('22')
>>> d
deque(['22', '11', '1'])

count()  统计

>>> d
deque(['11', '22', '11', '1'])

>>> d.count('11')
2

单向队列

  先进先出

import queue

q = queue.Queue()

q.put('123')

q.put('678'

print(q.qsize())

2

print(q.get())

>>> print(q.get())
123
>>> print(q.get())
678
>>> print(q.get())

6、深浅拷贝

copy.copy()

  只拷贝一层

>>> s1 = 'aa'

>>> s2 = s1
>>> print(id(s1))
4558601776
>>> print(id(s2))
4558601776

>>> n1 = [1,2,'aa','bb',{'kk':'vv'}]
>>> n1
[1, 2, 'aa', 'bb', {'kk': 'vv'}]
>>> n2 = n1
>>> print(id(n1))
4558122952
>>> print(id(n2))
4558122952

copy.deepcopy()

  拷贝所有层
a

三、函数基础

  学习函数之前,为了实现某个特定功能,需要根据业务逻辑从上到下实现功能,套用无数个if...else或者while循环,需要相当长的代码来实现。并且在开发过程中会出现许多重复的代码,引入函数后就可以避免这一乱象。

1、自定义函数

  Python的函数是通过赋值传递的,参数通过赋值传递给函数。def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下:

def function_name(arg1,arg2[,...]):

  statement

[return value]

  def:表示函数的关键字

  函数名:函数的名称,根据名称来调用函数

  函数体:函数中进行一系列的逻辑计算,封装的一些功能

  参数:为函数体提供数据

  返回值:当函数执行完毕后,可以给调用者返回数据。但返回值不是必须的,如果没有return语句,则默认返回值为None。

示例:

#有返回值
def test():
  st1 = 'tom'
  st2 = 'cat'
  return st1,st2
reg = test()
print(reg)
#输出结果
('tom', 'cat')
#无返回值
def test():
st1 = 'tom'
st2 = 'cat'
reg = test()
print(reg)
#运行结果
None

参数:

  普通参数

  默认参数

  动态参数

  Python函数的两种类型参数,一种是函数定义里的形参,一种是调用函数时传入的实参。

在函数的内部,实参会被赋值给形参。

  作为实参传入到函数的变量名称和函数定义里形参的名字没有关系。函数里面只关心形参的值,而不去关心它在调用前叫什么名字。

异常处理:

  try/except 捕获异常并处理

try:

block
except [exception,[data…]]:
   block

  执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句;

  如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句;

  如果不匹配则执行下一个except。

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr def mail(f_user,t_user):
res = True
try:
msg = MIMEText('邮件内容','plain','utf-8')
msg['From'] = formataddr(['wo',f_user])
msg['To'] = formataddr(['Test',t_user])
msg['Subject'] = '主题'
server = smtplib.SMTP('smtp.163.com',25)
server.login(f_user,'hahah@163.com')
server.sendmail(f_user,[t_user,],msg.as_string())
server.quit()
except Exception:
res = False
return ret
res = mail('xxxxx@163.com','xxxxx@163.com')
if res == True:
print("Success!")
else:
print("Try again!")

  代码执行解析:

  1、传两个值给mail()分别为发送者和接受者邮箱;

  2、执行mail(),指定res为True,如果执行后面发送邮件功能正常运行,那么就不再执行except;

     如果发送邮件失败,执行except,并将res = False;

  3、如果res 返回值为True,打印“Success!”,否则打印“Try again!”

动态参数

  当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值

  示例:

def show(*args):
print(args,type(args))
show('enenen')
#运行结果
('enenen',) <class 'tuple'> # *args可以当作可容纳多个变量组成的list或tuple
def show(**args):
print(args,type(args))
show(k1 = 22)
#运行结果
{'k1': 22} <class 'dict'>
def show(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
show(2,3,4,232,4343,n1=20,k1='tom')
#运行结果
(2, 3, 4, 232, 4343) <class 'tuple'>
{'n1': 20, 'k1': 'tom'} <class 'dict'>

  写参数的时候,一个*放在前面,两个*放后面。

def show(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
l = [1,2,3,3434,343,]
d = {'k1':100,'k2':20}
show(*l,**d)
#运行结果
(1, 2, 3, 3434, 343) <class 'tuple'>
{'k2': 20, 'k1': 100} <class 'dict'
动态参数格式化
s1 = '{0} is {1}'
res = s1.format('tom','cat')
print(res)
#运行结果
tom is cat
s1 = '{0} is {1}'
l = ['tom','cat']
res = s1.format(*l)
print(res)
#运行结果
tom is cat
s1 = '{name} is {age}'
d1 = {'name':'tom','age':11}
res = s1.format(**d1)
print(res)
#运行结果
tom is 11

四、文件操作

  详情见http://www.cnblogs.com/xiajie/p/5081122.html补充部分:

read():读取指定数目个字节到字符串中,负数将读取至文件末尾,默认是-1

>>> file_obj = open('test.txt','r')
>>> file_obj.read()
'dfdff\n'
>>> file_obj.seek(0)
>>> file_obj.read(0)
''
>>> file_obj.read(1)
'd'
>>> file_obj.read(2)
'fd'
>>> file_obj.read(-1)
'ff\n'

readline():读取文件的一行,包括行结束符,可以制定size参数的值,默认是-1

>>> file_obj = open('test.txt','r')
>>> file_obj.readline()
'xxx\n'
>>> file_obj.readline(2)
'ha'
>>> file_obj.readline(-1)
'enene\n'

readlines():读取所有剩余的行,然后作为一个字符串列表返回

>>> file_obj.seek(0)
>>> file_obj.readlines()
['xxx\n', 'haha\n', 'enene\n']

文件的指针定位与查询

(1)文件指针:

文件被打开后,其对象保存在 f 中, 它会记住文件的当前位置,以便于执行读、写操作,这个位置称为文件的指针( 一个从文件头部开始计算的字节数 long 类型 )。

(2)文件打开时的位置:

以"r"   "r+"   "rb+" 读方式, "w"   "w+"   "wb+"写方式 打开的文件,

一开始,文件指针均指向文件的头部。

(3) 获取文件指针的值:

      L = f.tell()

(4) 移动文件的指针

   f.seek(   偏移量, 选项 )

选项 =0 时, 表示将文件指针指向从文件头部到 "偏移量"字节处。

选项 =1 时, 表示将文件指针指向从文件的当前位置,向后移动 "偏移量"字节。

选项 =2 时, 表示将文件指针指向从文件的尾部,,向前移动 "偏移量"字节。

  

>>> file_obj.seek(0)
>>> file_obj.tell()
0
>>> file_obj.seek(5)
>>> file_obj.tell()
5 >>> file_obj.seek(5,1)
>>> file_obj.tell()
10
>>> file_obj.seek(5,2)
>>> file_obj.tell()
57
>>> file_obj.seek(5,0)
>>> file_obj.tell()
5

Python 函数基础、有序集合、文件操作(三)的更多相关文章

  1. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

  2. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  3. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  4. C# 基础 字符串 集合 文件操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...

  6. 《转》Python学习(17)-python函数基础部分

    http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ...

  7. 10分钟学会Python函数基础知识

    看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...

  8. (Python )格式化输出、文件操作、json

    本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...

  9. python基础学习之文件操作&函数

    1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...

随机推荐

  1. hdu 2874Connections between cities LCA

    题目链接 给n个城市, m条边, q个询问, 每个询问, 输出城市a和b的最短距离, 如果不联通, 输出not connected. 用并查集判联通, 如果不连通, 那么两个联通块之间加一条权值很大的 ...

  2. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  3. selenium 学习笔记 ---新手学习记录(9) 问题总结(java)

    1.百度搜索目标--实例 boolean flag; //点击次数 int shcs=3; int i=0; //窗口焦点控制 String detailWindowHandle = null; // ...

  4. Qt开发小工具之gif转换器(使用QMovie截取每一帧为QImage,然后用QFile另存为图片文件)

    最近,QQ上好多各种gif表情.每一个都很经典呀..于是我就想把它转换成一张张静态图片...没学过ps.于是写了几行代码.完工.核心代码如下 主要是借助QMovie类.文件读取模式选择QMovie:: ...

  5. VS2012 EF5 连接oracle11.2

    1.安装ODAC 11.2 Release 5 and Oracle Developer Tools for Visual Studio (11.2.0.3.20). 注:支持VS2010和VS201 ...

  6. live555学习经验链接二

    live555学习经验链接二:http://blog.csdn.net/nkmnkm/article/category/1066093/2

  7. 用Visual C++设计“精灵”窗体

    随着Microsoft凭借Windows在操作系统上取得的巨大成绩,Windows用户界面也日益成为业界标准.统一的界面给广大用户对应用软件的学习与使用带来了很大方便.但每天都面对同一副面孔,日久天长 ...

  8. 此windows副本不是正版解决方法

    老爸的win7今天黑屏 右下角出现 Windows7 内部版本7601 此windows副本不是正版 网上零散地找到了解决办法 写博汇总一下 我的情况是 电脑属性中的windows激活显示: 状态不可 ...

  9. 网页压缩gzip的问题及说明教程

    关于网页压缩gzip的问题及说明教程 最近比较多人反应gzip的问题 在wdcp的后台里已经有gzip功能的选项,也就是说,只要在这里开启了,就已支持 但从最近的问题中发现,基本上都是使用一些在线检测 ...

  10. c语言编写经验逐步积累4

    寥寥数笔,记录我的C语言盲点笔记,仅仅为以前经历过,亦有误,可交流. 1.逻辑表达式的使用 取值 = 表达式 ? 表达式1:表达式2: 比方x = y > z ? y:z 2."+,- ...