资讯专栏INFORMATION COLUMN

Python 技巧总结

JackJiang / 433人阅读

摘要:内置函数遍历,并索引输出如果为,返回的商和余数组成的元组,。参见短路求值装饰器示例或或结果数组转置矩阵碾平分组字典,互换如果存在,返回,否则返回,默认值为。相比较,只能获取中存在的的值,如果不存在则触发。

内置函数 enumerate

enumerate(list[,start=0]):遍历list,并索引

my_list = ["apple", "banana", "grapes", "pear"]
for i, value in enumerate(my_list, 1):
    print(i, value)

输出:

(1, "apple")
(2, "banana")
(3, "grapes")
(4, "pear")
divmod(x,y)

如果 xint,返回x÷y的商和余数组成的元组,(x//y, x%y)
如果 xfloat,则返回 (math.floor(x / y), x%y)

可以以此很方便的形成二维数组:

>>>[divmod(i, 3) for i in range(9)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
短路求值 三元运算

利用 python 逻辑运算的短路求值特性,我们可以实现python不支持的三元运算符 bool ? a : b

bool and a or b     # 其中要求 a, b 为真

当然有更pythonic 的实现方法:

a if bool else b
and 与 or 优先级
True or True and False    #=> True

造成结果为True的原因是因为短路求值,不是因为存在臆想中的优先级问题--True or (True and False),orand` 一起使用,遵循自左向右计算原则。

参见:短路求值

装饰器 示例1:
table = [i * i for i in range(5)]

或:

def call(*argv, **kwargs):
    def call_fn(fn):
        return fn(*argv, **kwargs)
    return call_fn
@call(5)
def table(n):
    value = []
    for i in range(n):
        value.append(i*i)
    return value

或:

@list
@call(5)
def table(n):
    for i in range(n):
        yield i * i

结果:

len(table), table[3]    #=> (5, 9)
数组(List) 转置矩阵
m = [[1,2],[3,4]]
zip(*m)
碾平list
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]
list分组
a=[3, 8, 9, 4, 1, 10, 6, 7, 2, 5]
print([a[i:i+3] for i in range(0,len(a),3)])
# [[3, 8, 9], [4, 1, 10], [6, 7, 2], [5]]
字典(Dict) key,value互换
m = {"a": 1, "b": 2, "c": 3, "d": 4}
{v: k for k, v in m.items()}
# {1: "a", 2: "b", 3: "c", 4: "d"}
Dict.get()

dict.get(key[, default=None]): 如果key存在,返回dict[key],否则返回defaultdefault默认值为None。相比较,dict["key"] 只能获取 dict 中存在的key的值,如果不存在则触发 KeyError。利用此方法,在对字典进行某些运算时会更优雅:

if key not in dct:
    dct[key] = 0
dct[key] = dct[key] + 1
dct[key] = dct.get(key, 0) + 1
d = {
    "a": 1,
    "b": 2,
}
d.get("c", 3)   #=> 3
Dict.setdefault()

Dict.setdefault(key, default):如果存在,返回 dct[key],不存在则把 dct[key] 设为 default 并返回它。当一个默认的值是一个你可以修改的对象的时候这是很有用的。

dct = {}
for key, value in data:
    if key in dct:
        dct[key].append(value)
    else:
        dct[key] = [value]
dct = {}
for (key, value) in data:
    group = dct.setdefault(key, []) # key might exist already
    group.append(value)

参见:Python:字典的剧本

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40695.html

相关文章

  • 「码个蛋」2017年200篇精选干货集合

    摘要:让你收获满满码个蛋从年月日推送第篇文章一年过去了已累积推文近篇文章,本文为年度精选,共计篇,按照类别整理便于读者主题阅读。本篇文章是今年的最后一篇技术文章,为了让大家在家也能好好学习,特此花了几个小时整理了这些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 让你收获满满! 码个蛋从2017年02月20...

    wangtdgoodluck 评论0 收藏0
  • Python 基础起步 (十一) 写在最后的话(附优秀资源汇总)

    摘要:总结不知不觉作为一个小白已经写完了最最基础的简单教程,如果你也和我一样从事金融行业,或者毫无编程基础的小白,希望我的教程可以帮到你,这是基础起步的最终篇,我希望能和大家简单介绍一下后续介绍以及很多帮助到我的优秀的平台。 总结 不知不觉作为一个小白已经写完了最最基础的Python简单教程,如果你也和我一样从事金融行业,或者毫无编程基础的小白,希望我的教程可以帮到你,这是Python基础起...

    mrcode 评论0 收藏0
  • Python 进阶之路 (二) Dict 进阶宝典,初二快乐!

    摘要:新年快乐大家好,今天是大年初二,身在国外没有过年的氛围,只能踏实写写文章,对社区做点贡献,在此祝大家新年快乐上一期为大家梳理了一些的进阶用法,今天我们来看字典的相关技巧,我个人在编程中对字典的使用非常频繁,其实对于不是非常大的数据存储需求, 新年快乐 大家好,今天是大年初二,身在国外没有过年的氛围,只能踏实写写文章,对社区做点贡献,在此祝大家新年快乐!上一期为大家梳理了一些List的进...

    ChristmasBoy 评论0 收藏0

发表评论

0条评论

JackJiang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<