列表按难度排序,常用的语言特征和技巧放在前面。

1.1 分拆

>>> a, b, c = 1, 2, 3

>>> a, b, c

(1, 2, 3)

>>> a, b, c = [1, 2, 3]

>>> a, b, c

(1, 2, 3)

>>> a, b, c = (2 * i + 1 for i in range(3))

>>> a, b, c

(1, 3, 5)

>>> a, (b, c), d = [1, (2, 3), 4]

>>> a

1

>>> b

2

>>> c

3

>>> d

4

1.2 交换变量分拆

>>> a, b = 1, 2

>>> a, b = b, a

>>> a, b

(2, 1)

1.3 拓展分拆 (Python 3下适用)

>>> a, *b, c = [1, 2, 3, 4, 5]

>>> a

1

>>> b

[2, 3, 4]

>>> c

5

1.4 负索引

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[-1]

10

>>> a[-3]

8

1.5 列表切片 (a[start:end])

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[2:8]

[2, 3, 4, 5, 6, 7]

1.6 使用负索引的列表切片

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[-4:-2]

[7, 8]

1.7 带步进值的列表切片 (a[start:end:step])

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[::2]

[0, 2, 4, 6, 8, 10]

>>> a[::3]

[0, 3, 6, 9]

>>> a[2:8:2]

[2, 4, 6]

1.8 负步进值得列表切片

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[::-1]

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

>>> a[::-2]

[10, 8, 6, 4, 2, 0]

1.9 列表切片赋值

>>> a = [1, 2, 3, 4, 5]

>>> a[2:3] = [0, 0]

>>> a

[1, 2, 0, 0, 4, 5]

>>> a[1:1] = [8, 9]

>>> a

[1, 8, 9, 2, 0, 0, 4, 5]

>>> a[1:-1] = []

>>> a

[1, 5]

1.10 命名切片 (slice(start, end, step))

>>> a = [0, 1, 2, 3, 4, 5]

>>> LASTTHREE = slice(-3, None)

>>> LASTTHREE

slice(-3, None, None)

>>> a[LASTTHREE]

[3, 4, 5]

1.11 zip打包解包列表和倍数

>>> a = [1, 2, 3]

>>> b = ['a', 'b', 'c']

>>> z = zip(a, b)

>>> z

[(1, 'a'), (2, 'b'), (3, 'c')]

>>> zip(*z)

[(1, 2, 3), ('a', 'b', 'c')]

1.12 使用zip合并相邻的列表项

>>> a = [1, 2, 3, 4, 5, 6]

>>> zip(*([iter(a)] * 2))

[(1, 2), (3, 4), (5, 6)]

>>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))

>>> group_adjacent(a, 3)

[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent(a, 2)

[(1, 2), (3, 4), (5, 6)]

>>> group_adjacent(a, 1)

[(1,), (2,), (3,), (4,), (5,), (6,)]

>>> zip(a[::2], a[1::2])

[(1, 2), (3, 4), (5, 6)]

>>> zip(a[::3], a[1::3], a[2::3])

[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))

>>> group_adjacent(a, 3)

[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent(a, 2)

[(1, 2), (3, 4), (5, 6)]

>>> group_adjacent(a, 1)

[(1,), (2,), (3,), (4,), (5,), (6,)]

1.13 使用zip和iterators生成滑动窗口 (n -grams)

>>> from itertools import islice

>>> def n_grams(a, n):

... z = (islice(a, i, None) for i in range(n))

... return zip(*z)

...

>>> a = [1, 2, 3, 4, 5, 6]

>>> n_grams(a, 3)

[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]

>>> n_grams(a, 2)

[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

>>> n_grams(a, 4)

[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

1.14 使用zip反转字典

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

>>> m.items()

[('a', 1), ('c', 3), ('b', 2), ('d', 4)]

>>> zip(m.values(), m.keys())

[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]

>>> mi = dict(zip(m.values(), m.keys()))

>>> mi

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

1.15 摊平列表:

>>> a = [[1, 2], [3, 4], [5, 6]]

>>> list(itertools.chain.from_iterable(a))

[1, 2, 3, 4, 5, 6]

>>> sum(a, [])

[1, 2, 3, 4, 5, 6]

>>> [x for l in a for x in l]

[1, 2, 3, 4, 5, 6]

>>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

>>> [x for l1 in a for l2 in l1 for x in l2]

[1, 2, 3, 4, 5, 6, 7, 8]

>>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]

>>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]

>>> flatten(a)

[1, 2, 3, 4, 5, 6, 7, 8]

注意: 根据Python的文档,itertools.chain.from_iterable是首选。

1.16 生成器表达式

>>> g = (x ** 2 for x in xrange(10))

>>> next(g)

0

>>> next(g)

1

>>> next(g)

4

>>> next(g)

9

>>> sum(x ** 3 for x in xrange(10))

2025

>>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)

408

1.17 迭代字典

>>> m = {x: x ** 2 for x in range(5)}

>>> m

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

>>> m = {x: 'A' + str(x) for x in range(10)}

>>> m

{0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}

1.18 通过迭代字典反转字典

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

>>> m

{'d': 4, 'a': 1, 'b': 2, 'c': 3}

>>> {v: k for k, v in m.items()}

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

1.19 命名序列 (collections.namedtuple)

>>> Point = collections.namedtuple('Point', ['x', 'y'])

>>> p = Point(x=1.0, y=2.0)

>>> p

Point(x=1.0, y=2.0)

>>> p.x

1.0

>>> p.y

2.0

1.20 命名列表的继承:

>>> class Point(collections.namedtuple('PointBase', ['x', 'y'])):

... __slots__ = ()

... def __add__(self, other):

... return Point(x=self.x + other.x, y=self.y + other.y)

...

>>> p = Point(x=1.0, y=2.0)

>>> q = Point(x=2.0, y=3.0)

>>> p + q

Point(x=3.0, y=5.0)

1.21 集合及集合操作

>>> A = {1, 2, 3, 3}

>>> A

set([1, 2, 3])

>>> B = {3, 4, 5, 6, 7}

>>> B

set([3, 4, 5, 6, 7])

>>> A | B

set([1, 2, 3, 4, 5, 6, 7])

>>> A & B

set([3])

>>> A - B

set([1, 2])

>>> B - A

set([4, 5, 6, 7])

>>> A ^ B

set([1, 2, 4, 5, 6, 7])

>>> (A ^ B) == ((A - B) | (B - A))

True

1.22 多重集及其操作 (collections.Counter)

>>> A = collections.Counter([1, 2, 2])

>>> B = collections.Counter([2, 2, 3])

>>> A

Counter({2: 2, 1: 1})

>>> B

Counter({2: 2, 3: 1})

>>> A | B

Counter({2: 2, 1: 1, 3: 1})

>>> A & B

Counter({2: 2})

>>> A + B

Counter({2: 4, 1: 1, 3: 1})

>>> A - B

Counter({1: 1})

>>> B - A

Counter({3: 1})

1.23 迭代中最常见的元素 (collections.Counter)

>>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])

>>> A

Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1})

>>> A.most_common(1)

[(3, 4)]

>>> A.most_common(3)

[(3, 4), (1, 2), (2, 2)]

1.24 双端队列 (collections.deque)

>>> Q = collections.deque()

>>> Q.append(1)

>>> Q.appendleft(2)

>>> Q.extend([3, 4])

>>> Q.extendleft([5, 6])

>>> Q

deque([6, 5, 2, 1, 3, 4])

>>> Q.pop()

4

>>> Q.popleft()

6

>>> Q

deque([5, 2, 1, 3])

>>> Q.rotate(3)

>>> Q

deque([2, 1, 3, 5])

>>> Q.rotate(-3)

>>> Q

deque([5, 2, 1, 3])

1.25 有最大长度的双端队列 (collections.deque)

>>> last_three = collections.deque(maxlen=3)

>>> for i in xrange(10):

... last_three.append(i)

... print ', '.join(str(x) for x in last_three)

...

0

0, 1

0, 1, 2

1, 2, 3

2, 3, 4

3, 4, 5

4, 5, 6

5, 6, 7

6, 7, 8

7, 8, 9

1.26 字典排序 (collections.OrderedDict)

>>> m = dict((str(x), x) for x in range(10))

>>> print ', '.join(m.keys())

1, 0, 3, 2, 5, 4, 7, 6, 9, 8

>>> m = collections.OrderedDict((str(x), x) for x in range(10))

>>> print ', '.join(m.keys())

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

>>> m = collections.OrderedDict((str(x), x) for x in range(10, 0, -1))

>>> print ', '.join(m.keys())

10, 9, 8, 7, 6, 5, 4, 3, 2, 1

1.27 缺省字典 (collections.defaultdict)

>>> m = dict()

>>> m['a']

Traceback (most recent call last):

File "", line 1, in

KeyError: 'a'

>>>

>>> m = collections.defaultdict(int)

>>> m['a']

0

>>> m['b']

0

>>> m = collections.defaultdict(str)

>>> m['a']

''

>>> m['b'] += 'a'

>>> m['b']

'a'

>>> m = collections.defaultdict(lambda: '[default value]')

>>> m['a']

'[default value]'

>>> m['b']

'[default value]'

1.28 用缺省字典表示简单的树

>>> import json

>>> tree = lambda: collections.defaultdict(tree)

>>> root = tree()

>>> root['menu']['id'] = 'file'

>>> root['menu']['value'] = 'File'

>>> root['menu']['menuitems']['new']['value'] = 'New'

>>> root['menu']['menuitems']['new']['onclick'] = 'new();'

>>> root['menu']['menuitems']['open']['value'] = 'Open'

>>> root['menu']['menuitems']['open']['onclick'] = 'open();'

>>> root['menu']['menuitems']['close']['value'] = 'Close'

>>> root['menu']['menuitems']['close']['onclick'] = 'close();'

>>> print json.dumps(root, sort_keys=True, indent=4, separators=(',', ': '))

{

"menu": {

"id": "file",

"menuitems": {

"close": {

"onclick": "close();",

"value": "Close"

},

"new": {

"onclick": "new();",

"value": "New"

},

"open": {

"onclick": "open();",

"value": "Open"

}

},

"value": "File"

}

}

(到https://gist.github.com/hrldcpr/2012250查看详情)

1.29 映射对象到唯一的序列数 (collections.defaultdict)

>>> import itertools, collections

>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)

>>> value_to_numeric_map['a']

0

>>> value_to_numeric_map['b']

1

>>> value_to_numeric_map['c']

2

>>> value_to_numeric_map['a']

0

>>> value_to_numeric_map['b']

1

1.30 最大最小元素 (heapq.nlargest和heapq.nsmallest)

>>> a = [random.randint(0, 100) for __ in xrange(100)]

>>> heapq.nsmallest(5, a)

[3, 3, 5, 6, 8]

>>> heapq.nlargest(5, a)

[100, 100, 99, 98, 98]

1.31 笛卡尔乘积 (itertools.product)

>>> for p in itertools.product([1, 2, 3], [4, 5]):

(1, 4)

(1, 5)

(2, 4)

(2, 5)

(3, 4)

(3, 5)

>>> for p in itertools.product([0, 1], repeat=4):

... print ''.join(str(x) for x in p)

...

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

1.32 组合的组合和置换 (itertools.combinations 和 itertools.combinations_with_replacement)

>>> for c in itertools.combinations([1, 2, 3, 4, 5], 3):

... print ''.join(str(x) for x in c)

...

123

124

125

134

135

145

234

235

245

345

>>> for c in itertools.combinations_with_replacement([1, 2, 3], 2):

... print ''.join(str(x) for x in c)

...

11

12

13

22

23

33

1.33 排序 (itertools.permutations)

>>> for p in itertools.permutations([1, 2, 3, 4]):

... print ''.join(str(x) for x in p)

...

1234

1243

1324

1342

1423

1432

2134

2143

2314

2341

2413

2431

3124

3142

3214

3241

3412

3421

4123

4132

4213

4231

4312

4321

1.34 链接的迭代 (itertools.chain)

>>> a = [1, 2, 3, 4]

>>> for p in itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):

... print p

...

(1, 2)

(1, 3)

(1, 4)

(2, 3)

(2, 4)

(3, 4)

(1, 2, 3)

(1, 2, 4)

(1, 3, 4)

(2, 3, 4)

>>> for subset in itertools.chain.from_iterable(itertools.combinations(a, n) for n in range(len(a) + 1))

... print subset

...

()

(1,)

(2,)

(3,)

(4,)

(1, 2)

(1, 3)

(1, 4)

(2, 3)

(2, 4)

(3, 4)

(1, 2, 3)

(1, 2, 4)

(1, 3, 4)

(2, 3, 4)

(1, 2, 3, 4)

1.35 按给定值分组行 (itertools.groupby)

>>> from operator import itemgetter

>>> import itertools

>>> with open('contactlenses.csv', 'r') as infile:

... data = [line.strip().split(',') for line in infile]

...

>>> data = data[1:]

>>> def print_data(rows):

... print '\n'.join('\t'.join('{: <16}'.format(s) for s in row) for row in rows)

...

>>> print_data(data)

young myope no reduced none

young myope no normal soft

young myope yes reduced none

young myope yes normal hard

young hypermetrope no reduced none

young hypermetrope no normal soft

young hypermetrope yes reduced none

young hypermetrope yes normal hard

pre-presbyopic myope no reduced none

pre-presbyopic myope no normal soft

pre-presbyopic myope yes reduced none

pre-presbyopic myope yes normal hard

pre-presbyopic hypermetrope no reduced none

pre-presbyopic hypermetrope no normal soft

pre-presbyopic hypermetrope yes reduced none

pre-presbyopic hypermetrope yes normal none

presbyopic myope no reduced none

presbyopic myope no normal none

presbyopic myope yes reduced none

presbyopic myope yes normal hard

presbyopic hypermetrope no reduced none

presbyopic hypermetrope no normal soft

presbyopic hypermetrope yes reduced none

presbyopic hypermetrope yes normal none

>>> data.sort(key=itemgetter(-1))

>>> for value, group in itertools.groupby(data, lambda r: r[-1]):

... print '-----------'

... print 'Group: ' + value

... print_data(group)

...

-----------

Group: hard

young myope yes normal hard

young hypermetrope yes normal hard

pre-presbyopic myope yes normal hard

presbyopic myope yes normal hard

-----------

Group: none

young myope no reduced none

young myope yes reduced none

young hypermetrope no reduced none

young hypermetrope yes reduced none

pre-presbyopic myope no reduced none

pre-presbyopic myope yes reduced none

pre-presbyopic hypermetrope no reduced none

pre-presbyopic hypermetrope yes reduced none

pre-presbyopic hypermetrope yes normal none

presbyopic myope no reduced none

presbyopic myope no normal none

presbyopic myope yes reduced none

presbyopic hypermetrope no reduced none

presbyopic hypermetrope yes reduced none

presbyopic hypermetrope yes normal none

-----------

Group: soft

young myope no normal soft

young hypermetrope no normal soft

pre-presbyopic myope no normal soft

pre-presbyopic hypermetrope no normal soft

presbyopic hypermetrope no normal soft

python映射的主要特点_30 个 Python 语言的特点技巧相关推荐

  1. python自动下载安装软件_30行Python代码从百度自动下载图片(内附源码和exe程序)...

    只需要30行代码就可以从百度自动下载图片 大家好,我是行哥,一个专门教小学生撸Python的编程老师(小学生都能学会的编程) 这里行哥想问大家三个问题 : - 你还在为批量下载表情包发愁吗? - 你还 ...

  2. python 映射网络驱动器_如何使用Python将文件复制到网络路径或驱动器

    我尝试使用os.system调用NET USE命令,将共享映射到未使用的驱动器号(假设您在Windows上):os.system(r"NET USE P: \\ComputerName\Sh ...

  3. python二进制创建写模式_30 个Python代码实现的常用功能,精心整理版

    22点24分准时推送,第一时间送达 编辑:技术君 来源:源 / python | 文 /艾里艾兰 上一篇: 正文 1.冒泡排序 2.计算x的n次方的方法 3.计算a*a + b*b + c*c + - ...

  4. python 30个小代码_30个Python常用极简代码,拿走就用

    点击上方"测试开发社区",关注并"星标" 每日接收Python&测试开发干货! 学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才 ...

  5. python映射类型有哪些_什么是python中唯一的映射类型

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可 ...

  6. python映射类型-Python 映射类型字典dict操作定义

    Python映射类型字典基础知识:字典是用大括号{ }来表示,它是python中最灵活的内置数据类型.它是一个无序的集合,通过键来存取值,而不能用索引. 字典的创建和使用 字典的组成:字典是由大括号{ ...

  7. python映射类型-什么是python中唯一的映射类型

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可 ...

  8. python映射类型-python映射类型的相关介绍

    映射类型是一类可迭代的键-值数据项的组合,提供了存取数据项及其键和值的方法,在python3中,支持两种无序的映射类型:内置的dict和标准库中的collections.defaultdict类型. ...

  9. 一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块...

    简介 一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块. 举个例子: ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘 ...

最新文章

  1. 18.SSM整合_搭建开发环境
  2. 数据如何写入到HBase
  3. 超图软件:以用户价值为源点做精准化的研发
  4. 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式
  5. 心电图前波过多_【动态心电】如何阅读24小时动态心电图?
  6. 获取Access数据库中的用户表名
  7. Kotlin — 使用IDEA运行第一个Kotlin程序,打印“Hello World”!
  8. 公务员可以做哪些合法正规的兼职
  9. 计算机基础知识试题分值,计算机考试题分值分布.doc
  10. 国内浏览器双核模式 默认切换chrome内核
  11. windows安装tomcat8
  12. 72张三国历史演变地图
  13. 人脸识别服务器型号,人脸识别服务器,人脸识别接口,人脸识别方案定制开发
  14. java 实现写出倒立三角形的几种方法
  15. 操作系统中生产者/消费者问题(一)
  16. JavaWeb学习笔记(HTML语言)
  17. strncmp函数的简单用法
  18. Cocos Creator下JavaScript一步一步实现重力球游戏,附代码
  19. Android Ringtone 自定义铃声介绍
  20. Cloudify 学习(四):通过Cloudify的蓝图来创建第一个deployment,由k8s生成这个容器-容器编排

热门文章

  1. 最短路径之dijkstra算法的C语言实现
  2. 【原】PSD图标素材的全自动切图方法,适用于IOS、安卓、web前端等领域
  3. 为memcached增加缓存依赖的程序实现
  4. UI设计师,作品集该怎么做?场景展示样机更具专业性
  5. 国潮中国风工作学习总结学习PPT模板
  6. 设计灵感|有趣优雅的弹窗消息设计!
  7. 编程师代码G都喜欢的|细致场景森系插画手机壁纸
  8. 复古风格海报设计欣赏|蒸汽波了解下
  9. 在集设网欣赏灵感作品合集,感受字体之美
  10. 电商主题BANNER传统促销喜庆红色节日海报,C4D打造时尚场景