Python干货整理之奇淫技巧篇

 

Python知识点整理之奇淫技巧篇

作者:

Howard Wonanut

参考资料:

1. 30s学会一个python小技巧

2. Python正则表达式 | 菜鸟教程

3. Python title()方法 | 菜鸟教程

 

1 用一行代码判断一个字符串中的字符是否相同

str[1:] == str[:-1]

 可以将其封装为一个函数:

def all_equal(str):
    return str[1:] == str[:-1]

2  将一个字符串转化为驼峰式

这里的字符串需要满足如下规则:单词与单词之间需要使用"_", "-"或者" "分割。

import re

def camel(s):
    s = re.sub(r"(\s|_|-)+", " ", s).title().replace(" ", "")
    return s[0].lower() + s[1:]


"""
>>> camel("some-mixed_string with spaces_underscores-and-hyphens")
"someMixedStringWithSpacesUnderScoresAndHyphens"
"""

这方法里面涉及到以下知识点:

  • re.sub: re是python中的正则表达式模块,使用该模块可以轻松的对字符进行正则化处理。这里使用的re.sub的原型为:
re.sub(pattern, repl, string, count=0, flags=0)

"""
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
"""
  • title(): 返回"标题化"的字符串,就是说所有单词都是以大写开始,如输入为“this is a sentence.”将输出"This Is A Sentence."
  • replace(): 这是一个python中常用的函数,将字符串中所有第一个子串转换为第二个子串。
  • lower(): 这也是一个python中常用的函数,将字符中的英文字母转为小写。

 

3 复制一个字符串n次组成一个新的字符串

python中可以直接使用str * n_times完成对字符串的n_times次复制:

def n_times_string(str, n):
    return str * n

4 将字符串转换为下划线分割式

这个问题和问题2中的解决办法类似,使用re模块:

def snake(str):
    return '_'.join(re.sub('([A-Z]+)', r' \1', s.replace('-', ' ')).split()).lower()

"""
>>> snake("AllThe-small Things")
"all_the_small_things"
"""

5 获得字典的键列表

def keys_only(flat_dict):
    return list(flat_dict.keys())

6 获得字典的值列表

def values_only(flat_dict):
    return list(flat_dict.values())

7 用一种很Python的方法将列表逆序

def reverse(arr):
    return arr[::-1]

8 一行代码完成for循环生成列表

下面的这些写法叫做python列表推导式

arr = [1,2,3,4,5,6,7]

[x*x for x in arr]
>>> [1, 4, 9, 16, 25, 36, 49]

# 添加判断条件
[x*x for x in arr if x&1]
>>> [1, 9, 25, 49]

还有更强的,for循环语句也可以嵌套

[a+b for a in 'ABC' for b in 'abc']
>>> ['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']

列表推导式中有if-else语句的

a=[i if i&1==0 else 'A' for i in range(10)]

9 一行代码Python定义二维数组

定义一个三行四列的二维数组

# 方法1
arr = [[0 for i in range(4)] for j in range(3)]
>>> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

# 方法2
import numpy as np
arr = np,array([[0]*4]*3)
>>> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

10 reduce函数

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

from functools import reduce

def add(a, b):
    return a + b

reduce(add, [1,2,3,4,5]) # 输出15:1+2+3+4+5

应用举例:

现有三个数组l1=["A","B","C"], l2=["x", "y", "z"], l3=[1, 2, 3],编程得到这三个数组按顺序排列结果x1x2x3,满足x1,x2,x3分别属于l1,l2,l3。

from functools import reduce

def func(l1, l2):
    return [str(a)+str(b) for a in l1 for b in l2]

reduce(func, [["A","B","C"],["x","y","z"],[1,2,3]])

也可以一行代码搞定

from functools import reduce

reduce(lambda l1,l2: [str(a)+str(b) for a in l1 for b in l2], [["A","B","C"],["x","y","z"],[1,2,3]])
发布了115 篇原创文章 · 获赞 96 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/qq_26822029/article/details/102227681
今日推荐