1.分拆

a, b, c = 1, 2, 3
print(a,b,c) # 1 2 3
a, b, c = [1, 2, 3]
print(a,b,c) # 1 2 3
a, b, c = (2 * i + 1 for i in range(3)) # range不能超出value的范围,超出too many values to unpack (expected 3)
print(a,b,c) # 1 3 5a, (b, c), d = [1, (2, 3), 4]
print(a,b,c) # 1 2 3
print('-'*10,"分割线","-"*10)

2.交换变量分拆

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a, b = 1, 2
a, b = b, a
print(a,b) # 2 1
print('-'*10,"分割线","-"*10)

拓展分拆 (Python 3下适用)

a, *b, c = [1, 2, 3, 4, 5] # *匹配多个值
print(a,b,c) #1 [2, 3, 4] 5
print('-'*10,"分割线","-"*10)

3.负索引

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[-1]) # 10
print('-'*10,"分割线","-"*10)

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

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[2:8]) #[2, 3, 4, 5, 6, 7]
print('-'*10,"分割线","-"*10)

5.使用负索引的列表切片

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[-4:-2]) # [7,8]
print('-'*10,"分割线","-"*10)

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

print(a[::2]) # [0, 2, 4, 6, 8, 10]
print(a[::3]) # [0, 3, 6, 9]
print(a[2:8:2]) # [2, 4, 6]
print('-'*10,"分割线","-"*10)

7.负步进值得列表切片

print(a[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(a[::-2]) # [10, 8, 6, 4, 2, 0]
print('-'*10,"分割线","-"*10)

8.列表切片赋值

a = [1, 2, 3, 4, 5]
a[2:3] = [0, 0]
print(a) # [1, 2, 0, 0, 4, 5]
a[1:1] = [8, 9]
print(a) # [1, 8, 9, 2, 0, 0, 4, 5]
a[1:-1] = []
print(a) # [1, 5]
print('-'*10,"分割线","-"*10)

9.命名切片 (slice(start, end, step))

a = [0, 1, 2, 3, 4, 5]
LASTTHREE = slice(-3, None)
print(LASTTHREE) # slice(-3, None, None)
print(a[LASTTHREE]) # [3, 4, 5]
print('-'*10,"分割线","-"*10)

10.zip打包解包列表和倍数(好奇)

a = [1, 2, 3]
b = ['a', 'b', 'c']
z = zip(a, b) #
# <class 'zip'>类型是什么,打印z返回个内存地址,类似迭代器
print(type(z))
print(type(zip(*z)))

问题:
zip(a,b)返回了什么对象,不知,但不能迭代,
打印返回内存地址,不能用该赋值的对象用list直接转化为列表

zip(a,b)是从a,b种各自取出一个元素组成元组,再将依次组成的元组合成一个新的迭代器

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
print(list(zip(a,b))) # zip直接作用在参数上可以用list转化为列表 [(1, 'a'), (2, 'b'), (3, 'c')]
print(list(z)) # []
print(list(zip(*zip(a,b)))) #[(1, 2, 3), ('a', 'b', 'c')]
print('-'*10,"分割线","-"*10)

11.使用zip合并相邻的列表项

a = [1, 2, 3, 4, 5, 6]
b = zip(*([iter(a)] * 2))
# 打印不出[(1, 2), (3, 4), (5, 6)]
print(b) # <zip object at 0x000002387349DB48> ;zip属性还不能用下标,用了报错'zip' object is not subscriptable
# zip属性迭代也打印不出
print(i for i in b) # <generator object <genexpr> at 0x0000016DAE8C7A40>
print('-'*10,"分割线","-"*10)
group_adjacent = lambda a, k: zip(*([iter(a)] * k))
print(group_adjacent(a, 3)) # <zip object at 0x000002251FBBDF48>
print(list(group_adjacent(a,3))) # [(1, 2, 3), (4, 5, 6)]
print('-'*10,"分割线","-"*10)

12.使用zip和iterators生成滑动窗口 (n -grams) 不理解

from itertools import islice
def n_grams(a, n):z = (islice(a, i, None) for i in range(n))return list(zip(*z))
a = [1, 2, 3, 4, 5, 6]
print(n_grams(a, 3))
print('-'*10,"分割线","-"*10)

13.使用zip反转字典

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(m.items()) # dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
print( list(zip(m.values(), m.keys()))) # 由于zip返回的是内存地址,所以用list转化为列表,但list无法转化zip对象,转化的话返回空列表
mi = dict(zip(m.values(), m.keys()))
print(mi) # {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
print('-'*10,"分割线","-"*10)

14.摊平列表

import itertools
a = [[1, 2], [3, 4], [5, 6]]
# 使用itertools.chain.from_iterable使二维变一维
print(list(itertools.chain.from_iterable(a))) # [1, 2, 3, 4, 5, 6]
# sum使二维变一维
b = sum(a, [])
print(b) # [1, 2, 3, 4, 5, 6]
# []内加双for
c= [x for l in a for x in l]
print(c) # [1, 2, 3, 4, 5, 6]
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]
print(flatten(a)) # [1, 2, 3, 4, 5, 6, 7, 8]
print('-'*10,"分割线","-"*10)

15.生成器表达式

g = (x ** 2 for x in range(10))
print(next(g)) # 0
print(next(g)) # 1
d = sum(x ** 3 for x in range(10))
print(d) # 2025
e = sum(x ** 3 for x in range(10) if x % 3 == 1) # 3的倍数
print(e) # 408
print('-'*10,"分割线","-"*10)

16.迭代字典

m = {x: x ** 2 for x in range(5)}
print(m) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
m = {x: 'A' + str(x) for x in range(10)} # {0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}
print(m)
print('-'*10,"分割线","-"*10)

17.通过迭代字典反转字典

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(m) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
m1 = {v: k for k, v in m.items()}
print(m1) # {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
print('-'*10,"分割线","-"*10)

18.命名序列 (collections.namedtuple)

import collections
Point = collections.namedtuple('Point', ['x', 'y'])
p = Point(x=1.0, y=2.0)
print(p) # Point(x=1.0, y=2.0)
print(p.x) # 1.0
print(p.y) # 2.0
print('-'*10,"分割线","-"*10)

19.命名列表的继承:

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)
print(p+q) # Point(x=3.0, y=5.0)
print('-'*10,"分割线","-"*10)

20.集合及集合操作

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
A = {1, 2, 3, 3}
B = {3, 4, 5, 6, 7}
print(A|B) # {1, 2, 3, 4, 5, 6, 7}
print(A & B) # {3}
print(A - B) # {1, 2}去除A中B所拥有的元素
print(B - A) # {4, 5, 6, 7}去除B中A所拥有的元素
# print(A + B) # 没有A+B
print(A ^ B) # {1, 2, 4, 5, 6, 7}

^的作用是前面的集合去掉后面的集合剩下的部分或者成并集

print(set([1,2,3])^set([1])) # {2, 3}
print(set([1])^set([1,2,3])) # {2, 3}
print((A ^ B) == ((A - B) | (B - A))) # True
print('-'*10,"分割线","-"*10)

21.多重集及其操作 (collections.Counter

A = collections.Counter([1, 2, 2])
B = collections.Counter([2, 2, 3])
print(A) # Counter({2: 2, 1: 1})
print(B) # Counter({2: 2, 3: 1})
print(A-B) # Counter({1: 1})
print(B-A) # Counter({3: 1})
print(A+B) # Counter({2: 4, 1: 1, 3: 1})
print(A&B) # Counter({2: 2})
print(A | B) # Counter({2: 2, 1: 1, 3: 1})
print('-'*10,"分割线","-"*10)

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

A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])
print(A) # Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1})
print(A.most_common(1)) # [(3, 4)]
print(A.most_common(3)) # [(3, 4), (1, 2), (2, 2)]
print('-'*10,"分割线","-"*10)

双端队列 (collections.deque) rotate的用法顺时针或逆时针旋转

Q = collections.deque()
Q.append(1)
Q.appendleft(2)
Q.extend([3, 4])
Q.extendleft([5, 6])
print(Q) # deque([6, 5, 2, 1, 3, 4])
print(Q.pop()) # 4
print(Q.popleft()) # 6
print(Q) # deque([5, 2, 1, 3])
Q.rotate(3)  # 整个队列顺时针旋转3个单位
print(Q) #deque([2, 1, 3, 5])
Q.rotate(-3)
print(Q) # deque([5, 2, 1, 3])
print('-'*10,"分割线","-"*10)

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

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
last_three = collections.deque(maxlen=3)
for i in range(10):last_three.append(i)# 这打印出每组3个元素有什么用么,每组3个,都是循环队列中最大的值print (','.join(str(x) for x in last_three))
print('-'*10,"分割线","-"*10)

24.缺省字典 (collections.defaultdict)

m = dict()
# m['a'] # KeyError: 'a'
m = collections.defaultdict(int)
print(m['a']) # 0
m = collections.defaultdict(str)
print(m['a']) # 空白换行
m['b'] += 'a'
print(m['b']) # a
m = collections.defaultdict(lambda: '[default value]')
print(m['a']) # [default value]print('-'*10,"分割线","-"*10)

用缺省字典表示简单的树

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=(',', ': ')))
print('-'*10,"分割线","-"*10)

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

import itertools, collections
value_to_numeric_map = collections.defaultdict(itertools.count().__next__) # 这里使用__next__;不使用next
print(value_to_numeric_map['a']) # 0
print(value_to_numeric_map['b']) # 1
print(value_to_numeric_map['a']) # 0
print('-'*10,"分割线","-"*10)

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

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import random,heapq
a = [random.randint(0, 100) for __ in range(100)]
print(heapq.nsmallest(5, a)) # [0, 0, 0, 1, 1] 最小的5个元素
print(heapq.nlargest(5, a)) # [100, 98, 97, 96, 92]
print('-'*10,"分割线","-"*10)

27.笛卡尔乘积 (itertools.product)

for p in itertools.product([1, 2, 3], [4, 5]):print(p)
# for p in itertools.product([0, 1], repeat=4):
#     print (''.join(str(x) for x in p))
print('-'*10,"分割线","-"*10)

28.组合的组合和置换 (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))
print('-'*10,"分割线","-"*10)# 排序 (itertools.permutations)
# for p in itertools.permutations([1, 2, 3, 4]):
#     print (''.join(str(x) for x in p))

29.链接的迭代 (itertools.chain)

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a = [1, 2, 3, 4]
# for p in itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):
#     print(p)
print('-'*10,"分割线","-"*10)

30.按给定值分组行 (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)
print('-'*10,"分割线","-"*10)

【Python教程】30个语言特性技巧整理相关推荐

  1. 总结Python的几点语言特性

    总结Python的几点语言特性 Python语言简洁,优雅,扩展性强...... 这些特点常被Python程序员挂在嘴边,确实也都是Python的特点. 要讨论语言的特点或特性,可以得到很多不同的结论 ...

  2. 简明python教程 豆瓣-福利分享:个人整理的Python书单,从基础到进阶

    原标题:福利分享:个人整理的Python书单,从基础到进阶 我挑选的一些书籍,大家可以自行到书店或是网上自己选购.也由于个人水平有限,很可能大家觉得优秀的书籍没有列出,如果大家有觉得不错的书籍,欢迎大 ...

  3. 专科python应届生工资多少-应届生学Python年薪30万,秘诀是什么?

    今天给大家分享一篇关于Python入门学习的文章,如果你是新手,这篇文章将告诉你学习方法和各阶段路径.最后关于现在Python薪资的分析,希望对你有所帮助. Python是最容易入门的编程语言,没有之 ...

  4. python教程 it教程网_it教程网Python实战班视频免费下载

    教程内容:第一章内容 Hello Python上手简单脚本游戏 图形 WEB 你能想到的方方面面PYTHON都可以实现github上python的项目也足够多运行速度不是瓶颈 课程实战目标python ...

  5. # Python3 面试试题--Python语言特性

    Python语言特性 1 Python的函数参数传递 看两个例子: a = 1 def fun(a):a = 2 fun(a) print(a) # 1 a = [] def fun(a):a.app ...

  6. 30分钟 Python 教程

    Python 教程 本教程以最简单的方式力求全面介绍常用和常见python语法及相关特性. 本教程适用于有一定的编程(C/C++/Java/C#/js等)基础的人员. 作者-dwSun Python介 ...

  7. python 特性和方法同名_Python语言特性的梳理

    对python的语言特性,多线程机制,以及性能局限的梳理 运行环境 由于Python不同版本,尤其是Python2与Pyhton3之间差异明显,所以运行不同项目时往往需要不同版本的运行环境,这种情况下 ...

  8. pythonencoding etf-8_etf iopv python 代码30个Python常用小技巧

    1.原地交换两个数字x, y =10, 20 print(x, y) y, x = x, y print(x, y) 10 20 20 10 2.链状比较操作符n = 10 print(1 print ...

  9. python语言的开发者_写给.NET开发者的Python教程(一):引言

    距离上一篇博文已过去8个月了,这段时间发生了很多事情导致没能持续更新博客.这段时间除了工作繁忙,业余时间都投入到AI技术的学习中,后面一段时间将会给大家分享我作为一个.NET开发人员在深度学习领域学习 ...

最新文章

  1. Redux 入门教程(三):React-Redux 的用法
  2. nanodet onnx踩坑记录
  3. 《当下的哲学》[法]阿兰.巴迪欧(作者)epub+mobi+azw3格式下载
  4. html链接txt文件,怎么在TXT文件中建立超链接
  5. React开发(207):react代码分割之context的动态
  6. CCNA网络小菜鸟笔记之(第十一章, 广域网协议)
  7. 如何使用 Java AWT 创建一个简易计算器
  8. linux bitcoind环境搭建,bitcoin_book_2nd
  9. ftk学习记(combox篇)
  10. 你不知道的 CSS 文档流技巧,让布局更简单
  11. python傅里叶变换相位谱图_图像傅里叶变换的幅度谱、相位谱以及双谱重构原图像...
  12. 微信卡券开发错误自排查参考文档
  13. 电感电容阻抗和公式记录
  14. 市场调研-全球与中国化妆品级抗坏血酸葡糖苷市场现状及未来发展趋势
  15. 自然语言处理工具之 HanLP 鸟瞰
  16. 前端学习——静态网页制作
  17. 出差日程安排软件哪个好
  18. 一款非常不错的高仿UC浏览器源码下载
  19. 第十三届蓝桥杯c++b组国赛决赛
  20. WEB Workers 介绍

热门文章

  1. WP评论系统更换小结(转)
  2. nodeJs express mongodb 建站(mac 版)
  3. Hbase的学习笔记(1)
  4. HDOJ - 4474 简单分析后,BFS
  5. 大学课程重新学习-操作系统
  6. OSPF的高级配置(连载1)
  7. J2ME手机文件加密
  8. 七、【SAP-PM模块】信息系统 报表分析
  9. 【转】物料与客户主数据的税分类
  10. sap scc4 客户端设置