python 函数式编程 库_python标准库之函数式编程(4)

collections 模块包含了除list、dict、和tuple之外的容器数据类型,如counter、deque、defaultdict、orderdict、namedtuple。

一、Counter1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24from collections import Counter

print(collections.Counter('abcbcaccbbad'))

print(collections.Counter(['a', 'b', 'c', 'a', 'b', 'b']))

print(collections.Counter({'a':2, 'b':3, 'c':1}))

print(collections.Counter(a=2, b=3, c=1))

# Counter实例支持聚合结果的算术和集合操作

c1 = collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])

c2 = collections.Counter('alphabet')

print(c1)

print(c2)

print('Combined counts:')

print(c1 + c2)

print('Subtraction counts:')

print(c1 - c2)

print('Intersection(相同键的值取最小):')

print(c1 & c2)

print('Union(相同键的值取最大):')

print(c1 | c2)

1、update()

采用update()方法对容器进行更新

1

2

3

4

5

6

7

8

9

10

11

12import collections

c = collections.Counter()

print(c)

c.update('abcdaab')

print(c)

# Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1})

c.update({'a':1, 'd':5})

print(c)

# Counter({'d': 6, 'a': 4, 'b': 2, 'c': 1})

2、elements()

elements()方法可以返回一个包含所有Counter数据的迭代器

1

2

3

4

5

6

7

8

9

10

11

12import collections

c = collections.Counter('abcdaabz')

print(c)

# Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1, 'z': 1})

c['z'] = 0

print(c)

# Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1, 'z': 0})

print(list(c.elements()))

# ['a', 'a', 'a', 'b', 'b', 'c', 'd']

3、most_common()

most_common()返回前n个最多的数据

1

2

3

4

5import collections

c=collections.Counter('aassdddffff')

for letter, count in c.most_common(2):

print('%s: %d' % (letter, count))

二、deque

双端队列,支持从两端添加和删除元素。更常用的栈和队列是退化形式的双端队列,仅限于一端在输入和输出。

1、两端插入1

2

3

4

5

6

7

8

9

10

11

12

13

14

15import collections

# 右端插入

d = collections.deque()

d.extend('abcdefg')

print('extend:', d)

d.append('h')

print('append:', d)

# 左端插入

d = collections.deque()

d.extendleft('abcdefg')

print('extendleft:', d)

d.appendleft('h')

print('appendleft:', d)

2、两端获取1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17import collections

print('From the right:')

d = collections.deque('abcdefg')

while True:

try:

print(d.pop())

except IndexError:

break

print('From the left:')

d = collections.deque('abcdefg')

while True:

try:

print(d.popleft())

except IndexError:

break

3、双端移动1

2

3

4

5

6

7

8

9

10

11

12

13

14

15import collections

d = collections.deque(range(10))

print('Normal:', d)

# deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

d = collections.deque(range(10))

d.rotate(2)

print('Right Move:', d)

# deque([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])

d = collections.deque(range(10))

d.rotate(-2)

print('Left Move:', d)

# deque([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])

三、defaultdict

defaultdict 叫默认字典,是字典的一个子类,继承字典的方法和属性。defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值。

1

2

3

4

5

6

7

8

9

10

11from collections import defaultdict

dict1 = defaultdict(int)

dict2 = defaultdict(set)

dict3 = defaultdict(str)

dict4 = defaultdict(list)

print(dict1[1])

print(dict2[1])

print(dict3[1])

print(dict4[1])

四、OrderDict

OrderDict 叫有序字典,也是字典类型的一个子类,是对字典的一个补充。

字典类型是一个无序的集合,如果要想将一个传统的字典类型进行排序一般会将字典的键值取出来做排序后在根据键值来进行有序的输出。如果我们定义一个有序字典将不用再如此麻烦,字典顺序将按照录入顺序进行排序且不会改变。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25# 定义传统字典

dic1 = dict()

# 按顺序添加字典内容

dic1['a'] = '123'

dic1['b'] = 'jjj'

dic1['c'] = '394'

dic1['d'] = '999'

# 排序

dic1_key_list = []

for k in dic1.keys():

dic1_key_list.append(k)

dic1_key_list.sort()

for key in dic1_key_list:

print('dic1字典排序结果 %s:%s' % (key, dic1[key]))

# 定义有序字典

from collections import OrderedDict

dic2 = OrderedDict()

dic2['a'] = '123'

dic2['b'] = 'jjj'

dic2['c'] = 'abc'

dic2['d'] = '999'

for k, v in dic2.items():

print('有序字典:%s:%s' % (k,v))

五、nametuple1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25bob = ('Bob', 30, 'male')

print(bob)

jane = ('Jane', 29, 'female')

print(jane[0])

for p in [bob, jane]:

print('%s is a %d year old %s' % p)

####################################################

from collections import namedtuple

# 创建一个nametuplede 类, 类名称为Person

P = namedtuple('Person', 'name, age, gender')

# 通过Person类实例化一个对象bob

bob = P(name='Bob', age=30, gender='male')

# 通过Person类实例化一个对象jane

jane = P(name='Jane', age=29, gender='female')

print(jane.name)

for p in [bob, jane]:

print('%s is a %d year old %s' % p)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值