天天看点

python学习笔记二 列表、字典、集合

1、列表

<code>#!/usr/bin/env python</code>

<code>#_*_coding:utf-8_*_</code>

<code>names </code><code>=</code> <code>[</code><code>'Alex'</code><code>,</code><code>"Tenglan"</code><code>,</code><code>'Eric'</code><code>]</code>

<code>#print names[0] //python2.7不必加括号</code>

<code>print</code> <code>(names[</code><code>0</code><code>])</code>

<code>#切片:取多个元素 </code>

<code>names </code><code>=</code> <code>[</code><code>"Alex"</code><code>,</code><code>"Tenglan"</code><code>,</code><code>"Eric"</code><code>,</code><code>"Rain"</code><code>,</code><code>"Tom"</code><code>,</code><code>"Amy"</code><code>]</code>

<code>print</code> <code>(names[</code><code>1</code><code>:</code><code>4</code><code>])</code>

<code>#追加</code>

<code>names.append(</code><code>"xiao"</code><code>)</code>

<code>print</code> <code>(names)</code>

<code>#插入</code>

<code>names.insert(</code><code>2</code><code>,</code><code>"强行从Eric前面插入"</code><code>)</code>

<code>#修改</code>

<code>names[</code><code>2</code><code>]</code><code>=</code><code>"该换人了"</code>

<code>#删除</code>

<code>del</code> <code>names[</code><code>2</code><code>]</code>

<code>#删除指定元素</code>

<code>names.remove(</code><code>"Eric"</code><code>)</code>

<code>#删除列表最后一个值</code>

<code>names.pop()</code>

<code>#扩展</code>

<code>b </code><code>=</code> <code>[</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>]</code>

<code>names.extend(b)</code>

<code>#拷贝</code>

<code>name_copy</code><code>=</code><code>names.copy()</code>

<code>print</code> <code>(name_copy)</code>

<code>#统计</code>

<code>names</code><code>=</code><code>[</code><code>'Alex'</code><code>, </code><code>'Tenglan'</code><code>, </code><code>'Amy'</code><code>, </code><code>'Tom'</code><code>, </code><code>'Amy'</code><code>, </code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>]</code>

<code>print</code> <code>(names.count(</code><code>"Amy"</code><code>))</code>

<code>#排序</code>

<code>names[</code><code>-</code><code>3</code><code>] </code><code>=</code> <code>'1'</code>

<code>names[</code><code>-</code><code>2</code><code>] </code><code>=</code> <code>'2'</code>

<code>names[</code><code>-</code><code>1</code><code>] </code><code>=</code> <code>'3'</code>

<code>names.sort()</code>

<code>print</code><code>(names)</code>

<code>#反转</code>

<code>names.reverse()</code>

<code>#获取下标</code>

<code>print</code> <code>(names.index(</code><code>"Amy"</code><code>))</code>

2、元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

语法

names = ("alex","jack","eric")

它只有2个方法,一个是count,一个是index,完毕。

<code>names </code><code>=</code> <code>(</code><code>"alex"</code><code>,</code><code>"jack"</code><code>,</code><code>"eric"</code><code>)</code>

<code>print</code> <code>(names.count(</code><code>"alex"</code><code>))</code>

<code>print</code> <code>(names.index(</code><code>"jack"</code><code>))</code>

3、字符串操作

<code># -*- coding: utf-8 -*-</code>

<code># @Time    : 2017/3/26 11:31</code>

<code># @Author  : corasql</code>

<code># @Site    : </code>

<code># @File    : str_test.py</code>

<code># @Software: PyCharm Community Edition</code>

<code>#首字母大写</code>

<code>name</code><code>=</code><code>'test'</code>

<code>print</code> <code>(name[</code><code>0</code><code>].capitalize())</code>

<code>#大写全部变小写</code>

<code>name </code><code>=</code> <code>"TeSt"</code>

<code>print</code> <code>(name.casefold())</code>

<code># 输出 '-----------------------TeSt-----------------------'</code>

<code>print</code> <code>(name.center(</code><code>50</code><code>,</code><code>"-"</code><code>))</code>

<code>#将字符串编码成bytes格式</code>

<code>print</code> <code>(name.encode())</code>

<code>#判断字符串是否以 Li结尾</code>

<code>name </code><code>=</code> <code>"TeStLi"</code>

<code>print</code><code>(name.endswith(</code><code>"Li"</code><code>))</code>

<code>#输出'Alex      Li', 将\t转换成多长的空格</code>

<code>print</code> <code>(</code><code>"Alex\tLi"</code><code>.expandtabs(</code><code>10</code><code>))</code>

<code>#查找A,找到返回其索引, 找不到返回-1</code>

<code>print</code> <code>(name.find(</code><code>'A'</code><code>))</code>

<code># @Time    : 2017/3/26 12:58</code>

<code># @File    : str_test1.py</code>

<code>#format</code>

<code>msg </code><code>=</code> <code>"my name is {}, and age is {}"</code>

<code>print</code> <code>(msg.</code><code>format</code><code>(</code><code>"alex"</code><code>,</code><code>22</code><code>))</code>

<code>msg </code><code>=</code> <code>"my name is {1}, and age is {0}"</code>

<code>msg </code><code>=</code> <code>"my name is {name}, and age is {age}"</code>

<code>print</code> <code>(msg.</code><code>format</code><code>(age</code><code>=</code><code>22</code><code>,name</code><code>=</code><code>"ale"</code><code>))</code>

<code>print</code> <code>(msg.format_map({</code><code>'name'</code><code>: </code><code>'alex'</code><code>, </code><code>'age'</code><code>: </code><code>22</code><code>}))</code>

<code>#返回a所在字符串的索引</code>

<code>print</code> <code>(msg.index(</code><code>'a'</code><code>) )</code>

<code>#检测字符串是否由字母和数字组成</code>

<code>print</code> <code>(</code><code>'9aA'</code><code>.isalnum())</code>

<code>#是否整数</code>

<code>print</code> <code>(</code><code>'9'</code><code>.isdigit())</code>

<code>#检测字符串是否只由数字组成。这种方法是只针对unicode对象</code>

<code>str</code> <code>=</code> <code>u</code><code>"this2009"</code>

<code>print</code> <code>(</code><code>str</code><code>.isnumeric())</code>

<code>str</code> <code>=</code> <code>u</code><code>"23443434"</code>

<code>#判断字符串所包含的字符是否全部可打印。字符串包含不可打印字符,如转义字符,将返回False</code>

<code>print</code> <code>(</code><code>str</code><code>.isprintable())</code>

<code>#字符串是否仅包含空格或制表符。注意:空格字符与空白是不同的</code>

<code>print</code> <code>(</code><code>str</code><code>.isspace())</code>

<code>#判断字符串每个单词的首字母是否大写</code>

<code>print</code> <code>(</code><code>str</code><code>.istitle())</code>

<code>#判断所有字母字符是否全部大写</code>

<code>print</code> <code>(</code><code>str</code><code>.isupper())</code>

<code>#'alex|jack|rain'</code>

<code>print</code> <code>(</code><code>"|"</code><code>.join([</code><code>'alex'</code><code>,</code><code>'jack'</code><code>,</code><code>'rain'</code><code>]))</code>

<code>#maketrans</code>

<code>intab </code><code>=</code> <code>"aeiou"</code>

<code>outtab </code><code>=</code> <code>"12345"</code>

<code>trantab </code><code>=</code> <code>str</code><code>.maketrans(intab, outtab)</code>

<code>str</code> <code>=</code> <code>"this is string example....wow!!!"</code>

<code>print</code> <code>(</code><code>str</code><code>.translate(trantab))</code>

<code>#out: th3s 3s str3ng 2x1mpl2....w4w!!!</code>

<code>print</code> <code>(msg.partition(</code><code>'is'</code><code>))</code>

<code>#out: ('my name ', 'is', ' {name}, and age is {age}')</code>

<code>#替换</code>

<code>print</code> <code>(</code><code>"alex li, chinese name is lijie"</code><code>.replace(</code><code>"li"</code><code>, </code><code>"LI"</code><code>, </code><code>1</code><code>))</code>

<code>#大小写互换</code>

<code>print</code> <code>(</code><code>str</code><code>.swapcase())</code>

<code>print</code> <code>(msg.zfill(</code><code>40</code><code>))</code>

<code># out: 00000my name is {name}, and age is {age}</code>

<code>print</code> <code>(msg.ljust(</code><code>40</code><code>,</code><code>"-"</code><code>))</code>

<code>#my name is {name}, and age is {age}-----</code>

<code>print</code> <code>(msg.rjust(</code><code>40</code><code>, </code><code>"-"</code><code>))</code>

<code>#-----my name is {name}, and age is {age}</code>

<code># 检测一段字符串可否被当作标志符,即是否符合变量命名规则</code>

<code>b</code><code>=</code><code>"ddefdsdff_哈哈"</code>

<code>print</code> <code>(b.isidentifier())</code>

4、字典操作

字典的特性:

dict是无序的

key必须是唯一的,so 天生去重

<code># @Time    : 2017/3/26 13:26</code>

<code># @File    : dic.py</code>

<code>info </code><code>=</code> <code>{</code>

<code>    </code><code>'stu1101'</code><code>: </code><code>"TengLan Wu"</code><code>,</code>

<code>    </code><code>'stu1102'</code><code>: </code><code>"LongZe Luola"</code><code>,</code>

<code>    </code><code>'stu1103'</code><code>: </code><code>"XiaoZe Maliya"</code><code>,</code>

<code>}</code>

<code>#增加</code>

<code>info[</code><code>"stu1104"</code><code>] </code><code>=</code> <code>"Python "</code>

<code>print</code> <code>(info)</code>

<code>info[</code><code>'stu1101'</code><code>] </code><code>=</code><code>"test"</code>

<code>info.pop(</code><code>"stu1101"</code><code>) </code><code>#标准删除姿势</code>

<code>del</code> <code>info[</code><code>'stu1103'</code><code>]  </code><code># 换个姿势删除</code>

<code>#随机删除</code>

<code>info </code><code>=</code> <code>{</code><code>'stu1102'</code><code>: </code><code>'LongZe Luola'</code><code>, </code><code>'stu1103'</code><code>: </code><code>'XiaoZe Maliya'</code><code>}</code>

<code>info.popitem()</code>

<code>#查找</code>

<code>print</code> <code>(</code><code>"stu1102"</code> <code>in</code> <code>info) </code><code>#标准用法</code>

<code>print</code> <code>(info.get(</code><code>"stu1102"</code><code>))  </code><code>#获取</code>

<code>print</code> <code>(info[</code><code>"stu1102"</code><code>]) </code><code>#同上,但是看下面</code>

<code>print</code> <code>(info[</code><code>"stu1105"</code><code>])  </code><code>#如果一个key不存在,就报错,get不会,不存在只返回None</code>

<code>#循环dict</code>

<code>#方法1</code>

<code>for</code> <code>key </code><code>in</code> <code>info:</code>

<code>    </code><code>print</code><code>(key,info[key])</code>

<code>#方法2</code>

<code>for</code> <code>k,v </code><code>in</code> <code>info.items(): </code><code>#会先把dict转成list,数据里大时莫用</code>

<code>    </code><code>print</code><code>(k,v)</code>

5、集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

去重,把一个列表变成集合,就自动去重了

关系测试,测试两组数据之前的交集、差集、并集等关系

<code>s </code><code>=</code> <code>set</code><code>([</code><code>3</code><code>,</code><code>5</code><code>,</code><code>9</code><code>,</code><code>10</code><code>])      </code><code>#创建一个数值集合  </code>

<code>  </code> 

<code>t </code><code>=</code> <code>set</code><code>(</code><code>"Hello"</code><code>)         </code><code>#创建一个唯一字符的集合  </code>

<code>a </code><code>=</code> <code>t | s          </code><code># t 和 s的并集  </code>

<code>b </code><code>=</code> <code>t &amp; s          </code><code># t 和 s的交集  </code>

<code>c </code><code>=</code> <code>t – s          </code><code># 求差集(项在t中,但不在s中)  </code>

<code>d </code><code>=</code> <code>t ^ s          </code><code># 对称差集(项在t或s中,但不会同时出现在二者中)</code>

基本操作:  

<code>t.add(</code><code>'x'</code><code>)            </code><code># 添加一项  </code>

<code>s.update([</code><code>10</code><code>,</code><code>37</code><code>,</code><code>42</code><code>])  </code><code># 在s中添加多项  </code>

<code>   </code> 

<code>使用remove()可以删除一项:  </code>

<code>t.remove(</code><code>'H'</code><code>)</code>

<code>len</code><code>(s)  </code>

<code>set</code> <code>的长度  </code>

<code>x </code><code>in</code> <code>s  </code>

<code>测试 x 是否是 s 的成员  </code>

<code>x </code><code>not</code> <code>in</code> <code>s  </code>

<code>测试 x 是否不是 s 的成员  </code>

<code>s.issubset(t)  </code>

<code>s &lt;</code><code>=</code> <code>t  </code>

<code>测试是否 s 中的每一个元素都在 t 中  </code>

<code>s.issuperset(t)  </code>

<code>s &gt;</code><code>=</code> <code>t  </code>

<code>测试是否 t 中的每一个元素都在 s 中  </code>

<code>s.union(t)  </code>

<code>s | t  </code>

<code>返回一个新的 </code><code>set</code> <code>包含 s 和 t 中的每一个元素  </code>

<code>s.intersection(t)  </code>

<code>s &amp; t</code>

<code>返回一个新的 </code><code>set</code> <code>包含 s 和 t 中的公共元素  </code>

<code>s.difference(t)  </code>

<code>s </code><code>-</code> <code>t  </code>

<code>返回一个新的 </code><code>set</code> <code>包含 s 中有但是 t 中没有的元素  </code>

<code>s.symmetric_difference(t)  </code>

<code>s ^ t  </code>

<code>返回一个新的 </code><code>set</code> <code>包含 s 和 t 中不重复的元素  </code>

<code>s.copy()  </code>

<code>返回 </code><code>set</code> <code>“s”的一个浅复制</code>

6、文件操作 

<code># @Time    : 2017/3/26 14:00</code>

<code># @File    : file.py</code>

<code>f </code><code>=</code> <code>open</code><code>(</code><code>'lyrics'</code><code>)  </code><code># 打开文件</code>

<code>first_line </code><code>=</code> <code>f.readline()</code>

<code>print</code><code>(</code><code>'first line:'</code><code>, first_line)  </code><code># 读一行</code>

<code>print</code><code>(</code><code>'我是分隔线'</code><code>.center(</code><code>50</code><code>, </code><code>'-'</code><code>))</code>

<code>data </code><code>=</code> <code>f.read()  </code><code># 读取剩下的所有内容,文件大时不要用</code>

<code>print</code><code>(data)  </code><code># 打印文件</code>

<code>f.close()  </code><code># 关闭文件</code>

7、字符编码与转码 

需知:

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

<code>python2</code>

<code># @Time    : 2017/3/26 13:55</code>

<code># @File    : decode2.py</code>

<code>import</code> <code>sys</code>

<code>print</code><code>(sys.getdefaultencoding())</code>

<code>msg </code><code>=</code> <code>"我爱北京天安门"</code>

<code>msg_gb2312 </code><code>=</code> <code>msg.decode(</code><code>"utf-8"</code><code>).encode(</code><code>"gb2312"</code><code>)</code>

<code>gb2312_to_gbk </code><code>=</code> <code>msg_gb2312.decode(</code><code>"gbk"</code><code>).encode(</code><code>"gbk"</code><code>)</code>

<code>print</code><code>(msg)</code>

<code>print</code><code>(msg_gb2312)</code>

<code>print</code><code>(gb2312_to_gbk)</code>

<code>python3</code>

<code># @Time    : 2017/3/26 13:51</code>

<code># @File    : decode.py</code>

<code>#msg_gb2312 = msg.decode("utf-8").encode("gb2312")</code>

<code>msg_gb2312 </code><code>=</code> <code>msg.encode(</code><code>"gb2312"</code><code>) </code><code>#默认就是unicode,不用再decode,喜大普奔</code>

<code>gb2312_to_unicode </code><code>=</code> <code>msg_gb2312.decode(</code><code>"gb2312"</code><code>)</code>

<code>gb2312_to_utf8 </code><code>=</code> <code>msg_gb2312.decode(</code><code>"gb2312"</code><code>).encode(</code><code>"utf-8"</code><code>)</code>

<code>print</code><code>(gb2312_to_unicode)</code>

<code>print</code><code>(gb2312_to_utf8)</code>

<code></code>

本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1910454,如需转载请自行联系原作者