Python知识点整理之奇淫技巧篇
作者:
参考资料:
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]])