ThirdWeek_SecondDay

Python学习笔记整理

# 集合运算

## 并集
1、将两个集合A和B的所有元素合并到一起,组成的集合称作集合A与集合B的并集

union(*others)
返回和多个集合合并后的新的集合

|: 运算符重载
等同union

In [6]: s1 = {1,2,3,4}

In [7]: s2 = {1,4,5,6}

In [8]: s1 |s2
Out[8]: {1, 2, 3, 4, 5, 6}

In [9]: s1.union(s2)
Out[9]: {1, 2, 3, 4, 5, 6}

update(*others)
和多个集合合并,就地修改

|=:
等同于update
In [10]: s1 |= s2

In [11]: s1
Out[11]: {1, 2, 3, 4, 5, 6}

## 交集

1、集合A和B,由所有属于A且属于B的元素组成的集合

intersction(*others)
返回多个集合的交集

&:
等同于intersection
In [12]: s1 & s2
Out[12]: {1, 4, 5, 6}

In [13]: s1
Out[13]: {1, 2, 3, 4, 5, 6}

In [14]: s2
Out[14]: {1, 4, 5, 6}

intersection_update(*others)
获取和多个集合的交集,并就地修改

&=:
等同于intersection_update
In [18]: s1 &= s2

In [19]: s1
Out[19]: {1, 4, 5, 6}

In [20]: s2
Out[20]: {1, 4, 5, 6}

## 差集

集合A和B,由所有属于A且不属于B的元素组成的集合

difference(*others)
返回多个集合的差集

-:
等同于difference

In [21]: s1 = {1, 2, 3, 4, 5, 6}

In [22]: s2
Out[22]: {1, 4, 5, 6}

In [23]: s1 – s2
Out[23]: {2, 3}

difference_update(*others)
获取和多个集合的差集并就地修改

-=:
等同于difference_update

In [24]: s1
Out[24]: {1, 2, 3, 4, 5, 6}

In [25]: s2
Out[25]: {1, 4, 5, 6}

 

In [27]: s1 -= s2

In [28]: s1
Out[28]: {2, 3}

In [29]: s2
Out[29]: {1, 4, 5, 6}

## 对称差集
集合A和B,由所有不属于A和B的交集元素组成的集合,记作(A-B)u(B-A)

symmetric_differece(other)
返回和另一个集合的差集

^:
等同于symmetric_differece

In [1]: s1 = {1,2,3,4,5,6}

In [2]: s2 = {5,6,7,8,9}

In [3]: s1 ^ s2
Out[3]: {1, 2, 3, 4, 7, 8, 9}

symmetric_differece_update(other)
获取和另一个集合的差集并就地修改

^=:
等同于symmetric_differece_update

In [3]: s1
Out[3]: {1, 2, 3, 4, 5, 6}

In [4]: s2
Out[4]: {4, 5, 6, 7, 8, 9}

In [5]: s1 ^= s2

In [6]: s1
Out[6]: {1, 2, 3, 7, 8, 9}

issubset(other),<=
判断当前集合是否是另一个集合的子集

set1 < set2
判断set1是否是set2的真子集

issuperset(other)、>=
判断当前集合是否是other的超集

isdisjoint(other)
当前集合和另一个集合没有交集
没有交集返回Tru

# dict字典

### 字典

1、key-value键值对的数据的集合
2、可变的、无序的、key不重复
Question:键值对的含义和概念?

### 字典dict定义 初始化
1、d = dict()或者 d = {},后者为常用
2、dict(**kwargs)使用可迭代对象和name=value对构造字典,不过可以迭代对象的元素必须为一个二元结构
model:
d = dict(((1,’a’),(2,’b’)))
In [260]: d
Out[260]: {1: ‘a’, 2: ‘b’}

或者d = dict(([1,’a’],[2,’b’]))
In [261]: d = dict(([1,’a’],[2,’b’]))

In [262]: d
Out[262]: {1: ‘a’, 2: ‘b’}
3、dict(mapping,**kwarg)使用一个字典构建另一个字典
4、d = {‘a’:10,’b’:20,’c’:None,’d’:[1,2,3]}
5、类方法dict.fromkeys(iterable,value)
d = dict.fromkeys(range(5))
d = dict.fromkeys(range(5),0)

model:
In [263]: d = dict.fromkeys(range(5))

In [264]: d
Out[264]: {0: None, 1: None, 2: None, 3: None, 4: None}

In [265]: d = dict.fromkeys(range(5),0)

In [266]: d
Out[266]: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
备注:4的方法比较常用,需多加熟悉和练习

一些其它的例子:
In [267]: d = dict(a=5,b=6,z=[1,2,3])

In [268]: d
Out[268]: {‘a’: 5, ‘b’: 6, ‘z’: [1, 2, 3]}

In [269]: d = dict(a=5,b=6,z=[123])

In [270]: d
Out[270]: {‘a’: 5, ‘b’: 6, ‘z’: [123]}

In [271]: l1 = list(range(5))

In [272]: l1
Out[272]: [0, 1, 2, 3, 4]

In [273]: d = dict(enumerate(l1))

In [274]: d
Out[274]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} #返回的都是二元组

In [275]: e = enumerate(l1)

In [276]: e
Out[276]: <enumerate at 0x7f20aefa0048>

In [277]: type(e)
Out[277]: enumerate

In [278]: d = dict(e)

In [279]: d
Out[279]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

In [1]: d1 = dict.fromkeys(range(1,11))

In [2]: d2 = dict.fromkeys(range(1,11),[1,2])

In [3]: d3 = dict.fromkeys(range(1,11),1)

In [4]: d4 = dict.fromkeys(range(1,11),[1])

In [5]: d1
Out[5]:
{1: None,
2: None,
3: None,
4: None,
5: None,
6: None,
7: None,
8: None,
9: None,
10: None}

In [6]: d2
Out[6]:
{1: [1, 2],
2: [1, 2],
3: [1, 2],
4: [1, 2],
5: [1, 2],
6: [1, 2],
7: [1, 2],
8: [1, 2],
9: [1, 2],
10: [1, 2]}

In [7]: d3
Out[7]: {1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1, 10: 1}

In [8]: d4
Out[8]:
{1: [1],
2: [1],
3: [1],
4: [1],
5: [1],
6: [1],
7: [1],
8: [1],
9: [1],
10: [1]}

备注:千万不要使用d2[10].append(3)
展示如下:
In [13]: d2[10].append(3)

In [14]: d2
Out[14]:
{1: [1, 2, 3],
2: [1, 2, 3],
3: [1, 2, 3],
4: [1, 2, 3],
5: [1, 2, 3],
6: [1, 2, 3],
7: [1, 2, 3],
8: [1, 2, 3],
9: [1, 2, 3],
10: [1, 2, 3]}

### 字典元素的访问
1、d[key]
返回key对应的值value
key不存在抛出KeyError异常
In [18]: d3[1]
Out[18]: 1

2、get(key[,default])
返回key对应的值value
key不存在返回缺省值,如果没有设置缺省值就返回None

In [20]: d3.get(9)
Out[20]: 1

In [23]: s = d3.get(11)

In [24]: s

In [25]: type(s)
Out[25]: NoneType

由返回值就可以使用判断,if None或者if not None

3、setdefault(key[,default])
返回key对应的值value
key不存在,添加kv对,value为default,并返回default,如果default没有设置,缺省值为None

In [30]: d = dict(([(1,3,4),{1,3,5,6}],))

In [31]: d[(1,3,4)]
Out[31]: {1, 3, 5, 6}

In [32]: d.setdefault(‘a’,3)
Out[32]: 3

In [33]: d
Out[33]: {‘a’: 3, (1, 3, 4): {1, 3, 5, 6}}

In [37]: d[‘a’]
Out[37]: 3

In [38]: d
Out[38]: {‘a’: 3, (1, 3, 4): {1, 3, 5, 6}}

In [39]: d[‘a’] = 100

In [40]: d
Out[40]: {‘a’: 100, (1, 3, 4): {1, 3, 5, 6}}

### 字典增加和修改
d[key] = value
将key对应的值修改为value
key不存在添加新的kv对

In [44]: d
Out[44]: {‘a’: 100, (1, 3, 4): {1, 3, 5, 6}}

In [45]: d[‘a’]
Out[45]: 100

In [46]: d[‘b’] = 10

In [47]: d
Out[47]: {‘a’: 100, ‘b’: 10, (1, 3, 4): {1, 3, 5, 6}}

update([other]) -> None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key对应的值
就地修改

In [48]: d
Out[48]: {‘a’: 100, ‘b’: 10, (1, 3, 4): {1, 3, 5, 6}}

In [49]: d1 = {‘c’:68}

In [50]: d.update(d1)

In [51]: d
Out[51]: {‘c’: 68, ‘a’: 100, ‘b’: 10, (1, 3, 4): {1, 3, 5, 6}}

In [51]: d
Out[51]: {‘c’: 68, ‘a’: 100, ‘b’: 10, (1, 3, 4): {1, 3, 5, 6}}

In [52]: d.update(f = 2)

In [53]: d
Out[53]: {‘f’: 2, ‘c’: 68, ‘a’: 100, ‘b’: 10, (1, 3, 4): {1, 3, 5, 6}}

In [53]: d
Out[53]: {‘f’: 2, ‘c’: 68, ‘a’: 100, ‘b’: 10, (1, 3, 4): {1, 3, 5, 6}}

In [54]: d.update(f = 5)

In [55]: d
Out[55]: {‘c’: 68, ‘a’: 100, (1, 3, 4): {1, 3, 5, 6}, ‘b’: 10, ‘f’: 5}

In [56]: d.update({‘x’:2})

In [57]: d
Out[57]: {‘c’: 68, ‘a’: 100, (1, 3, 4): {1, 3, 5, 6}, ‘x’: 2, ‘b’: 10, ‘f’: 5}

### 字典删除
pop(key[,default])
key存在,移除,返回其value
key不存在,返回给定的default
default未设置,key不存在,抛出KeyError异常

In [58]: d.pop(‘f’)
Out[58]: 5

In [59]: d
Out[59]: {‘c’: 68, ‘a’: 100, (1, 3, 4): {1, 3, 5, 6}, ‘x’: 2, ‘b’: 10}

popitem()
移除并返回一个任意的键值对
字典为empty,抛出KeyError异常

In [61]: d.popitem()
Out[61]: (‘c’, 68)

In [62]: d
Out[62]: {‘a’: 100, (1, 3, 4): {1, 3, 5, 6}, ‘x’: 2, ‘b’: 10}

clear()
清空字典

In [63]: d.clear()

In [64]: d
Out[64]: {}

### 字典删除
del语句
In [65]: a = True

In [66]: b = [6]

In [67]: d = {‘a’:1,’b’:b,’c’:[1,2,3]}

In [68]: del a

In [69]: d
Out[69]: {‘a’: 1, ‘b’: [6], ‘c’: [1, 2, 3]}

In [71]: del d[‘c’] #删除key,对应的value也就不存在了

In [72]: d
Out[72]: {‘a’: 1, ‘b’: [6]}

In [72]: d
Out[72]: {‘a’: 1, ‘b’: [6]}#删除b[0],删除b中索引为0的元素

In [73]: del b[0]

In [74]: d
Out[74]: {‘a’: 1, ‘b’: []}

In [76]: del c

In [77]: del b

In [78]: d
Out[78]: {‘a’: 1, ‘b’: []}

In [79]: b = d[‘b’]

In [80]: d
Out[80]: {‘a’: 1, ‘b’: []}

In [81]: b
Out[81]: []

备注:del a[‘c’]看着像删除了一个对象,本质上减少了一个对象的引用,del实际删除的是名称,而不是对象

### 字典遍历

for … in dict
遍历item,即kv对

In [84]: for item in d.items():
…: print(item)
…:
(‘a’, 1)
(‘b’, [])

In [85]: for k,v in d.items():
…: print(k,v)
…:
a 1
b []

遍历value
for k in d:
print(d[k])

for k in d.keys():
print(d.get(k))

遍历key
In [1]: d = {‘a’:1,’b’:2,’c’:3}

In [2]: for v in d.keys():
…: print(v)
…:
a
b
c

In [6]: for i in d:
…: print(i)
…:
…:
a
b
c

解构:
In [7]: for k,_ in d.items():
…: print(k)
…:
a
b
c

In [8]: for _,v in d.items():
…: print(v)
…:
1
2
3

也有for k,[_,v] in d.items()等多种变化用法

总结:
Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中

Python2中,上面的方法会返回一个新的列表,占据新的内存空间。所以Python2建议使用iterkey、itervalues、iteritems版本,返回一个迭代器,而不是一个copy

### 字典的key
key的要求和set的元素要求一致
hashable可哈希才可以作为key
In [1]: d = {1:0,2.0:3,”abc”:None,(‘Hello’,’world’,’python’):”string”,b’abc’:’135′}

In [2]: d
Out[2]:
{(‘Hello’, ‘world’, ‘python’): ‘string’,
1: 0,
2.0: 3,
‘abc’: None,
b’abc’: ‘135’}

### defaultdict
collections.defaultdict([default_factory[,…]])
第一个参数是default_factory,缺省值是None,它提供一个初始化函数。当key不存在的时候,会调用这个工厂函数来生成key对应的value

In [1]: from collections import defaultdict

In [2]: d1 = {}

In [3]: d2 = defaultdict(list)

In [4]: for k in “abcde”:
…: for v in range(5):
…: if k not in d1.keys():
…: d1[k] = []
…: d1[k].append(v)
…: print(d1)
…:
{‘a’: [0, 1, 2, 3, 4], ‘b’: [0, 1, 2, 3, 4], ‘e’: [0, 1, 2, 3, 4], ‘d’: [0, 1, 2, 3, 4], ‘c’: [0, 1, 2, 3, 4]}

In [8]: for i in ‘mnopq’:
…: for v in range(3):
…: d2[i].append(v)
…: print(d2)
…:
defaultdict(<class ‘list’>, {‘p’: [0, 1, 2], ‘n’: [0, 1, 2], ‘m’: [0, 1, 2], ‘q’: [0, 1, 2], ‘o’: [0, 1, 2]})

### OrderedDict
collections.OrderedDict([items])
key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序

from collections import OrderedDict
In [9]: from collections import OrderedDict

In [10]: import random

In [11]: d = {‘banana’:3,’apple’:4,’pear’:1,’orange’:2}

In [12]: print(d)
{‘pear’: 1, ‘orange’: 2, ‘apple’: 4, ‘banana’: 3}

In [13]: keys = list(d.keys())

In [14]: random.shuffle(keys)

In [15]: print(keys)
[‘pear’, ‘banana’, ‘apple’, ‘orange’]

In [16]: od = OrderedDict()

In [17]: for key in keys:
…: od[key] = d[key]
…: print(od)
…: print(od.keys())
…:
OrderedDict([(‘pear’, 1), (‘banana’, 3), (‘apple’, 4), (‘orange’, 2)])
odict_keys([‘pear’, ‘banana’, ‘apple’, ‘orange’])

OrderedDict:
1、有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印
2、3.6版本的Python的字典就是记录key插入的顺序

## 关于盐和hash的问题,以后可以深入了解一下。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87715

(0)
泰谷子泰谷子
上一篇 2017-10-09
下一篇 2017-10-09

相关推荐

  • N22第二周作业

    1.Linux上文件管理类命令有哪些,其常用的使用方法及其相关示列演示。  常用文件管理类命令有:cp, mv ,rm. (1)cp:copy (2)mv:move (3) rm:remove   2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示 3、请使用命令行展开功能来完成以下练习:   &nb…

    Linux干货 2016-08-22
  • Linux Basic–磁盘分区

    附件: 磁盘管理相关方法.pdf

    Linux干货 2016-11-21
  • linux下正则表达式的学习

    linux 下正则表达式用法总结 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。简单的说,正则表示式就是处理字符串的方法。常用来匹配字符的元字符总结如下: Paste_Image.png 有了以上这些元字符原则上可以搜索出任务想要表达的字符,可为了更灵活使用,往往还要搭配一些次数匹配的用法 Paste_Image.png 例如:a&nbsp…

    Linux干货 2017-06-04
  • 学习宣言

    书山有路勤为径,学海无涯苦作舟。学吧!!!

    Linux干货 2016-10-29
  • 文件查找相关:whereis、find和locate

        本文将对find和locate进行详细讲解 命令简介 名称:whereis     功能:定位文件所在的目录     用法:whereis shell命令     注意:whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如/bin、…

    Linux干货 2016-04-05
  • 22期第三周课堂作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who |cut -d" " -f 1 |uniq     2、取出最后登录到当前系统的用户的相关信息。 […

    Linux干货 2016-08-29