可能会用的pyhton小知识点

交换值

>>> a = 1
>>> b = 2
>>> a , b = b , a
>>> a
2
>>> b
1

列表解包

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

扩展列表

>>> i = ['a', 'b', 'c']
>>> i.extend(['e', 'f', 'g'])
>>> i
['a', 'b', 'c', 'e', 'f', 'g']

列表负数索引

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

列表切片

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[3:6] # 第3个到第6个之间的元素
[3, 4, 5]
>>> a[:5] # 前5个元素
[0, 1, 2, 3, 4]
>>> a[5:] # 后5个元素
[5, 6, 7, 8, 9]
>>> a[::] # 所有元素(拷贝列表)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::2] # 偶数项
[0, 2, 4, 6, 8]
>>> a[1::2] # 奇数项
[1, 3, 5, 7, 9]
>>> a[::-1] # 反转列表
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

二维数组变一维数组

import itertools
>>> a = [[1, 2], [3, 4], [5, 6]]
>>> i = itertools.chain(*a)
>>> list(i)
[1, 2, 3, 4, 5, 6]

有索引的迭代

>>> a = ['Merry','Christmas','Day']
>>> for i, x in enumerate(a):
 ...    print('{}: {}'.format(i,x))
 ...
 0: Merry
 1: Christmas
 2: Day

列表推导式

>>> le = [x * 2 for x in range(10)]
>>> le # 每个数取2倍
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

>>> le = [x for x in range(10) if x % 2 == 0]
>>> le # 获取偶数项
[0, 2, 4, 6, 8]

生成器表达式

>>> ge = (x * 2 for x in range(10))
>>> ge
<generator object <genexpr> at 0x01948A50>
>>> next(ge)
0
>>> next(ge)
4
...
>>> next(ge)
Traceback(most recent call last):
  File "<stdin>",line 1, in <module>
StopInteration

集合推导式

>>> nums = {n ** 2 for n in range(10)}
>>> nums
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

字典推导式

>>> d = {s : len(s) for s in ["one", "two", "three"]}
>>> d
{'one': 3, 'two': 3, 'three': 5}

合并两个字典

>>> def merge_dicts(d1,d2):
        return {k: v for d in (d1,d2) for k, v in d.items()}
>>> merge_dicts({"1":"2"}, {"a":"b"})
{'1':'2', 'a':'b'}

字符串合并

>>> i = ['a', 'b', 'c']
>>> "".join(i)
'abc'

判断key是否存在字典中

>>> d = {"1":"a"}
>>> d['2']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '2'
>>> '1' in d
True
>>> d['1']
'a'
>>> d.get("1")
'a'
>>> d.get("2")
>>>

三元运算

>>> d = {'1','a'}
>>> exist = True if '2' in d else False
>>> exist
False

装饰器

from functools import wraps 

def tags(tag_name):
  def tags_decorator(func):
    @wraps(func)
    def func_wrapper(name):
      return "<{0}>{1}</{0}>".format(tag_name,func(naem))
    return func_wrapper
  
@tags("p")
def get_text(name):
  """returns some text"""
  return "Hello " + name

print(get_text("Python"))
>>> <p>Hello Python</p>

字典子集

>>> def sub_dicts(d, keys):
 ...    return {k:v for k, v in d.items() if k in keys}
 ...
>>> sub_dicts({1:'a', 2:'b', 3:'c'},[1, 2])
{1:'a', 2:'b'}

两个列表转换字典

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> dict(zip(a,b))
{1:'a', 2:'b', 3:'c'}

反转字典

>>> d = {'a':1, 'b':2, 'c':3, 'b':4}
>>> zip(d.values(), d.keys())
<zip object at 0x019136E8>
>>> z = zip(d.values(), d.keys())
>>> dict(z)
{1:'a', 2:'b', 3:'c', 4:'d'}

具名元组

>>> from collectons import namedtuple
>>> Point = namedtuple("Point", "x,y")
>>> p = Point(x = 1, y =2)
>>> p.x
1
>>> p[0]
1
>>> p.y
2
>>> p[1]
2

默认字典

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d["a"]
[]
>>> d["a"].append(1)
>>> d["a"]
[1]

>>> d = defaultdict(lambda: [1])
>>> d
defaultdict(<function <lambda> at 0x00c0DB28>, {})
>>> d['a']
[1]

设置字典的默认值

>>> d = dict()
>>> if 'a' not in d:
 ...    d['a'] = []
 ...
>>> d['a'].append(1)
>>> d
{'a': [1]}

>>> d.setdefault('b',[]).append(2)
>>> d
{'a':[1], 'b':[2]}

频数统计

>>> from collections import Counter
>>> import random
>>> a = [random.randint(0,10) for __ in range(20)]
>>> a
[5, 4, 9, 6, 4, 2, 4, 6, 9, 5, 5, 1, 3, 6, 9, 1, 6, 1, 5, 5]
>>> Counter(a)
Counter({5: 5, 6: 4, 1: 3, 4: 3, 9: 3, 2: 1, 3: 1})

有序字典

>>> d = dict((str(x), x) for x in range(10))
>>> d.keys() # key 无序
dict_keys(['8', '2', '6', '9', '1', '0', '5', '4', '7', '3'])

>>> from collections import OrderedDict
>>> m  = OrderedDict((str(x), x) for x in range(10))
>>> m.keys() # key 按照插入的顺序排列
odict_keys(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])

列表中最大最小的前n个数

>>> import heapq
a = [51, 95, 14, 65, 86, 35, 85, 32, 8, 98]
>>> heapq.nlargest(5,a)
[98, 95, 86, 85, 65]
>>> heapq.nsmallest(5, a)
[8, 14, 32, 35, 51]

for ... else

found = False
for i in foo:
    if i == 0:
        found = True
        break
if not found:
    print("i was never 0")
    

for i in foo:
    if i == 0:
        break
else:
    print("i was never 0")

打开文件

>>> with open('foo.txt', 'w') as f:
...     f.write("hello")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容