list & dict & str

  这三种类型是python中最常用的几种数据类型。他们都是序列的一种

■  序列通用操作

  1. 分片

    s[a:b] 返回序列s中从s[a]到s[b-1]的片段。注意s[0:0]是空集而不是s[0]

    s[a:b:c]  加入第三个参数以设置取样步长。可以设置成负数来从右向左取样

  2. 加减乘除

    [None] *2 => [None,None]

  *  注意,这种列表直接乘以数字的做法是浅拷贝一个自身,然后再extend进去。由于是浅拷贝,所以存在着可变对象这样初始化可能会出现问题。比如:

  a = [{}] * 3 这样初始化变量a后。表面上看a是一个由三个字典组成的列表,但是实际上,a[0]['key'] = 'value'之后,a的值会变成[{'key': 'value'},{'key': 'value'},{'key': 'value'}],即三个字典实际上指向的是同一个对象,导致变化始终同步。

  3. 一些内建函数的操作

   len(s),max(s),min(s)等

■  list

  对于list类型,从数据结构层面上的分析记录在了“线性表的顺序表”中,在这不做展开。这里主要说明一下常用的list方法

  对于列表ls

  赋值  只要不越界,就可以进行分片的赋值

  del   del语句后面加的是list[index],不是值也不是索引

  ls.append()  返回值是None

  ls.count(...)  计某一值出现的次数

  ls.extend(another_ls)  将两个列表合并

  ls.index(value)  获取某个值的索引

  ls.insert(index,value)  在某个地方插入值

  ls.pop()  不加参数默认pop掉最后一个元素并且返回其值

  ls.remove(..)  去除从左到右第一个匹配到的值,如果没找到报错

  ls.reverse()  返回None,对ls本身反序

  ls.sort()  返回None,对ls本身排序

  //以上两个和sorted(ls),reversed(ls)区别,这两个是以ls为素材返回一个排序或者反序的迭代器。

  //顺便,sorted和sort可以再传一个key作为参数,key是一个函数对象,意思是在进行排序时依据不是默认的东西,而是把各个遍历的项(对字典来说就是键)作为参数传给key函数后经过处理后的返回值。比如想让一个字典的列表按照每个字典中的某个键"dict_key"的值大小来排序就可以sorted(dict,key=lambda x:x.get("dict_key"))

  

■  dict

  dict类型保存键值对,其键只能是str,tuple等不可变类型或者自定义的类型。假如是tuple之类组合对象的话tuple中的每一个元素都还必须是不可变类型。字典类型可以容纳任意多的键值对,并且支持高效检索(从字典中存取数据所花平均时间是O(1)的,但最坏情况下有可能达到O(n)。)

  对于字典d有以下方法

  d.clear()  清空字典

  d.copy()  深复制

  d.get(...)  

  d.has_key(...)  判断字典是否含有某个键

  d.items()  字典列表化,每个元素是个元组,tuple[0]是key,tuple[1]是value

  d.keys()

  d.update(e)  用e更新d,对于d中没有的key则新建item,对于有的覆盖老的value

  d.values()

  ■  str

  对于字符串s

  s.find(...)  返回子串的位置

  'mark'.join(list)  将mark作为分隔符把一个list给合并成一个字符串

  s.lower()  全部小写化

  s.upper()  全部大写

  s.title()  单词词首全部大写

  s.capitalize()  字串串首大写

  s.isupper()  判断是否是全部字符都是大写

  s.islower()

  s.istitle()

  //以上这六七个对字符串的文字性的处理都是返回值,不改变字符串本身的

  s.replace(a,b)

  s.split()

  s.strip()

  

  s.format("a","b")  这是个比较重要且有用的方法。用"a","b"等给出的素材串替换s中的带大括号的部分,相当于%s % (...)的作用。s中可以写"{},{}",这样format函数的参数会依次填补这些大括号,如果想要手动指定顺序也可以"{1},{0}"。如果s中写的不是{0},{1}这种的话可以写{some_text},然后在format的参数里就要写some_text=...来指定替换的变量的名称(有点模板语言的意思).相比于%的格式化字符串的替换,这个可以不用写完全一对一的个数。format的变量写法的话所有同样的变量都只要写一次就好了。*今天用这个format遇到一个坑:当你要替换的字符串里有正则指定模式重复多少遍的表达式(比如{12})这样的话format会报错,因为它把正则的{12}当成它要解析的第十二个变量了。解决方法是写两遍大括号来转义,即原文中的{12}如果要进行format就要写成{{12}}。

  在要经过format处理的字符串中还可以有更加灵活的写法。上面说到底是用format参数指定的值来替换一些字符串中的变量,但实际上,format的参数甚至可以是一个对象,然后在格式化字符串里面写上同名变量进行逻辑运算后再替换,比如可以通过下标或者访问属性的方法来取值:

#可以直接传一个列表对象
"{li[0]} and {li[1]} are two items".format(li=[1,2]) #在类中可以有类似以下的书写方法,相当于传一个自定义对象来取值格式化
"my name is {self.name} and my age is {self.age}".format(self=self)

  关于格式化输出这方面,用%号格式化输出的规则和C语言类似,但是用format方法的话不太一样,其表现形式是在大括号中加上冒号,以及各种不同的符号来表达格式化。比如<,^,>分别表示左对齐居中和右对齐,前面加上一个字符以表示填充符,后面加上一个数字表示宽度。"{var:0>8}".format(var="123") 得到"00000123"。"{:.2f}"则表示输出的数字要是float类型且保留两位小数,除了f表示float之外还可以有{:b}表示二进制,{:x}表示十六进制等,它们会自动对你传递进去的数字做进制转换再转化成字符串输出。类型提示必须放在位置提示后面比如"{var:0^20.2f}"这样。另外冒号后面加上一个逗号可以让输出有千位分隔。比如"{:,}".format(123456789)得到"123,456,789"

  另外,使用format的时候应该注意,调用它的对象和方法中的参数应尽量做到类型一直,比如"".format("")或者u"".format(u"")。如果出现str.format(unicode)时python默认操作是用系统的默认编码格式(sys.getdefaultcoding那个)对unicode进行encode然后将其整合到相应str中去。类似的,如果是unicode.format(str)的话,那么就是拿系统默认编码对str进行decode之后再整合进unicode。

■  string模块

  其实str类本身的一些方法还不够强大,所以有了专门的String模块来处理一些事情

  string模块的成员变量们:

    string.lowercase  指代所有小写字母,相当于"abcd....xyz"

    string.uppercase

    string.letters  所有字母,先大写再小写,相当于"abcd...xyzABC..XYZ"

    string.whitespace  所有空白字符

    string.punctuation  一些标点符号

  string模块的方法:

    capitlize(s)  返回S的首字母大写的串

    capwords(s,sep)  用sep来split掉s,然后把split出来的每部分的首字母大写,再用sep把这些部分连接起来,sep默认为空格

    center(s,width[,fllchar])  把s放在width(一个int数)长的字符串郑重,两边用fillchar填充。可以用于生成文本文件中的分隔符之类的  

    count(s,sub[,start[,end]])  返回在s[start:end]片段中sub子串出现的次数

    swapcase(s)  切换大小写字母

    zfill(s,width)  在s左侧添加0知道宽度达到width

  上面曾经提到过s.format类似模板语言(比如velocity,python的jinja2模块等)的功能,其实这是基于string中的一些类。string中有个Template类可以让用户手动地构造简单的模板:

from string import Template

s = Template("Hello, ${name}")    #变量用${...}的形式
s.substitute(name="Frank") #返回Hello, Frank
s.safe_substitute(namae="Frank") #save_substitute()对找不到的变量不报错

【Python】 list & dict & str的更多相关文章

  1. 【python】list,dict赋值不要用等号,要用extend,update

    如果有一个list,我们用连等号的方式赋值 c = d = [1], 则当c改变时,d同样会改变.字典同理 正确做法应该是: d = [1] c = [1] 或者 d = [1] c.extend(d ...

  2. 【python】字典dict

  3. 【Python】【内置函数】【bytes&bytearray&str&array】

    [bytes] 英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an i ...

  4. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

  5. 【Python】-NO.97.Note.2.Python -【Python 基本数据类型】

    1.0.0 Summary Tittle:[Python]-NO.97.Note.2.Python -[Python 基本数据类型] Style:Python Series:Python Since: ...

  6. 【python】多进程锁multiprocess.Lock

    [python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报  分类: Python(38)  同步的方法基本与多线程相同. ...

  7. 【Python】-NO.96.Note.2.Python -【Python 基础】

    1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...

  8. 【Python】无须numpy,利用map函数与zip(*)函数对数组转置(转)

    http://blog.csdn.net/yongh701/article/details/50283689 在Python的numpy中,对类似array=[[1,2,3],[4,5,6],[7,8 ...

  9. 【Python】文件读写操作

    Python的文件读写有点类似php的文件读写.php的文件读写已经在<[php]让记事本成为你调控变量的控制台>(点击打开链接)说过了,以下用一个小样例说明Python的文件读写. 在F ...

随机推荐

  1. DirectDraw用到的DDSURFACEDESC2

    DDSURFACEDESC2 结构定义一个需求的平面.下面的例子演示了结构的定义和标志位的设定: // Create the primary surface with one back buffer. ...

  2. 【html5】html5离线存储

    html5本地存储之离线存储 1.为什么使用离线存储 ①最新的主流的浏览器中都已添加了对HTML5的offline storage功能的支持,HTML5离线存储功能非常强大, 它的作用是:在用户没有与 ...

  3. ffmpeg在am335x上的移植

    交叉编译工具:arm-linux-gcc 一.先下载一下文件 1. yasm-1.2.0.tar.gz 2. x264-snapshot-20140424-2245.tar.bz2 3. xvidco ...

  4. 图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能

    泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...

  5. 【mongodb系统学习之十】mongodb查询(二)

    5).常用查询条件: a).比较操作符:"$lt","$lte","$gt","$gte",分别是<,<=, ...

  6. vxWorks应用程序加载的另一种办法

    现在我们的工作中,应用程序一般都是和BSP联编,然后将vxworks_rom.bin烧到班子里.在BSP启动后,调用应用程序的函数的. 但是这样有个问题,就是应用程序和BSP结合的太紧密了.BSP开发 ...

  7. Java之CyclicBarrier使用,任务等待

    1.类说明: 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 Cycl ...

  8. 模拟退火小结(Bzoj3680:吊打xxx)

    简介 就是模拟退火的物理过程,每次随机逼近乘上温度,以\(e^{\Delta/T}\)的概率接受答案,随机一个概率比较 然后就是调参+乱搞 题目 Bzoj3680:吊打xxx 代码 # include ...

  9. Filter的过滤链理解

    一.Filter过滤链 web.xml配置了filter过滤器,在容器启动的时候执行了init()方法进行了初始化,然后在容器关闭的时候执行了destroy()方法销毁过滤器,在每次服务器接受请求的时 ...

  10. js和jquery设置disabled属性为true使按钮失效

    设置disabled属性为true即为不可用状态. JS: document.getElementByIdx("btn").disabled=true;   Jquery: $(& ...