人生苦短,快学Python!
学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则。今天给大家分享的是 30 个极简任务,初学者可以尝试着自己实现;本文同样也是 30 段代码,Python 开发者也可以看看是不是有没想到的用法。
Python 是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性。如果读者对基本的 Python 语法已经有一些了解,那么这篇文章可能会给你一些启发。作者简单概览了 30 段代码,它们都是平常非常实用的技巧,我们只要花几分钟就能从头到尾浏览一遍。
干货主要有:
① 200 多本 Python 电子书(和经典的书籍)应该有
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且可靠的练手项目及源码)
④ Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
Python学习交流Q群101677771
- 重复元素判定
以下方法可以检查给定列表是不是存在重复元素,它会使用 set() 函数来移除所有重复元素。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">all_unique<span class="hljs-params">(lst):
<span class="hljs-keyword">return len(lst) == len(set(lst))
x = [<span class="hljs-number">1,<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">4,<span class="hljs-number">5,<span class="hljs-number">6]
y = [<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">4,<span class="hljs-number">5]
all_unique(x) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 字符元素组成判定
检查两个字符串的组成元素是不是一样的。
<span class="hljs-keyword">from collections <span class="hljs-keyword">import Counter
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">anagram<span class="hljs-params">(first, second):
<span class="hljs-keyword">return Counter(first) == Counter(second)
anagram(<span class="hljs-string">"abcd3", <span class="hljs-string">"3acdb") </span></span></span></span></span></span></span></span></span>
- 内存占用
下面的代码块可以检查变量 variable 所占用的内存。
<span class="hljs-keyword">import sys
variable = <span class="hljs-number">30
<span class="hljs-built_in">print(sys.getsizeof(variable)) </span></span></span>
- 字节占用
下面的代码块可以检查字符串占用的字节数。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">byte_size<span class="hljs-params">(string):
<span class="hljs-keyword">return(len(string.encode(<span class="hljs-string">'utf-8')))
byte_size(<span class="hljs-string">':grinning:') </span></span></span></span></span></span></span>
- 打印 N 次字符串
该代码块不需要循环语句就能打印 N 次字符串。
n = 2;
s =<span class="hljs-string">"Programming";
print(s * n);
</span>
- 大写第一个字母
以下代码块会使用 title() 方法,从而大写字符串中每一个单词的首字母。
s = <span class="hljs-string">"programming is awesome"
<span class="hljs-built_in">print(s.title())
</span></span>
- 分块
给定具体的大小,定义一个函数以按照这个大小切割列表。
<span class="hljs-keyword">from math <span class="hljs-keyword">import ceil
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">chunk<span class="hljs-params">(lst, size):
<span class="hljs-keyword">return list(
map(<span class="hljs-keyword">lambda x: lst[x * size:x * size + size],
list(range(<span class="hljs-number">0, ceil(len(lst) / size)))))
chunk([<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">4,<span class="hljs-number">5],<span class="hljs-number">2)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 压缩
这个方法可以将布尔型的值去掉,例如(False,None,0,””),它使用 filter() 函数。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">compact<span class="hljs-params">(lst):
<span class="hljs-keyword">return list(filter(bool, lst))
compact([<span class="hljs-number">0, <span class="hljs-number">1, <span class="hljs-literal">False, <span class="hljs-number">2, <span class="hljs-string">'', <span class="hljs-number">3, <span class="hljs-string">'a', <span class="hljs-string">'s', <span class="hljs-number">34])
</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 解包
如下代码段可以将打包好的成对列表解开成两组不同的元组。
<span class="hljs-built_in">array = [[<span class="hljs-string">'a', <span class="hljs-string">'b'], [<span class="hljs-string">'c', <span class="hljs-string">'d'], [<span class="hljs-string">'e', <span class="hljs-string">'f']]
transposed = zip(*<span class="hljs-built_in">array)
print(transposed)
[(<span class="hljs-string">'a', <span class="hljs-string">'c', <span class="hljs-string">'e'), (<span class="hljs-string">'b', <span class="hljs-string">'d', <span class="hljs-string">'f')]</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 链式对比
我们可以在一行代码中使用不同的运算符对比多个不同的元素。
<span class="hljs-string">a <span class="hljs-string">= <span class="hljs-number">3
<span class="hljs-string">print( <span class="hljs-number">2 <span class="hljs-string">< <span class="hljs-string">a <span class="hljs-string">< <span class="hljs-number">8<span class="hljs-string">) </span></span></span></span></span></span></span></span></span></span>
- 逗号连接
下面的代码可以将列表连接成单个字符串,且每一个元素间的分隔方式设置为了逗号。
hobbies = [<span class="hljs-string">"basketball", <span class="hljs-string">"football", <span class="hljs-string">"swimming"]
<span class="hljs-built_in">print(<span class="hljs-string">"My hobbies are: " + <span class="hljs-string">", ".join(hobbies))
</span></span></span></span></span></span>
- 元音统计
以下方法将统计字符串中的元音 (‘a’, ‘e’, ‘i’, ‘o’, ‘u’) 的个数,它是通过正则表达式做的。
<span class="hljs-keyword">import re
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">count_vowels<span class="hljs-params">(str):
<span class="hljs-keyword">return len(len(re.findall(<span class="hljs-string">r'[aeiou]', str, re.IGNORECASE)))
count_vowels(<span class="hljs-string">'foobar') </span></span></span></span></span></span></span></span>
- 首字母小写
如下方法将令给定字符串的第一个字符统一为小写。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">decapitalize<span class="hljs-params">(string):
<span class="hljs-keyword">return str[:<span class="hljs-number">1].lower() + str[<span class="hljs-number">1:]
decapitalize(<span class="hljs-string">'FooBar') </span></span></span></span></span></span></span></span>
- 展开列表
该方法将通过递归的方式将列表的嵌套展开为单个列表。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">spread<span class="hljs-params">(arg):
ret = []
<span class="hljs-keyword">for i <span class="hljs-keyword">in arg:
<span class="hljs-keyword">if isinstance(i, list):
ret.extend(i)
<span class="hljs-keyword">else:
ret.append(i)
<span class="hljs-keyword">return ret
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">deep_flatten<span class="hljs-params">(lst):
result = []
result.extend(
spread(list(map(<span class="hljs-keyword">lambda x: deep_flatten(x) <span class="hljs-keyword">if type(x) == list <span class="hljs-keyword">else x, lst))))
<span class="hljs-keyword">return result
deep_flatten([<span class="hljs-number">1, [<span class="hljs-number">2], [[<span class="hljs-number">3], <span class="hljs-number">4], <span class="hljs-number">5]) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 列表的差
该方法将返回第一个列表的元素,其不在第二个列表内。如果同时要反馈第二个列表独有的元素,还需要加一句 set_b.difference(set_a)。
def difference(a, b):
set_a = <span class="hljs-keyword">set(a)
set_b = <span class="hljs-keyword">set(b)
comparison = set_a.difference(set_b)
<span class="hljs-keyword">return <span class="hljs-keyword">list(comparison)
<span class="hljs-keyword">difference([<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">3], [<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">4]) </span></span></span></span></span></span></span></span></span></span></span>
- 通过函数取差
如下方法首先会应用一个给定的函数,然后再返回应用函数后结果有差别的列表元素。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">difference_by<span class="hljs-params">(a, b, fn):
b = set(map(fn, b))
<span class="hljs-keyword">return [item <span class="hljs-keyword">for item <span class="hljs-keyword">in a <span class="hljs-keyword">if fn(item) <span class="hljs-keyword">not <span class="hljs-keyword">in b]
<span class="hljs-keyword">from math <span class="hljs-keyword">import floor
difference_by([<span class="hljs-number">2.1, <span class="hljs-number">1.2], [<span class="hljs-number">2.3, <span class="hljs-number">3.4],floor) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 链式函数调用
你可以在一行代码内调用多个函数。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">add<span class="hljs-params">(a, b):
<span class="hljs-keyword">return a + b
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">subtract<span class="hljs-params">(a, b):
<span class="hljs-keyword">return a - b
a, b = <span class="hljs-number">4, <span class="hljs-number">5
print((subtract <span class="hljs-keyword">if a > b <span class="hljs-keyword">else add)(a, b)) </span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 检查重复项
如下代码将检查两个列表是不是有重复项。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">has_duplicates<span class="hljs-params">(lst):
<span class="hljs-keyword">return len(lst) != len(set(lst))
x = [<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">4,<span class="hljs-number">5,<span class="hljs-number">5]
y = [<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">4,<span class="hljs-number">5]
has_duplicates(x) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 合并两个字典
下面的方法将用于合并两个字典。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">merge_two_dicts<span class="hljs-params">(a, b):
c = a.copy() </span></span></span></span>
在 Python 3.5 或更高版本中,我们也可以用以下方式合并字典:
<span class="hljs-function">def <span class="hljs-title">merge_dictionaries<span class="hljs-params">(a, b)
<span class="hljs-keyword">return {**a, **b}
a = { <span class="hljs-string">'x': <span class="hljs-number">1, <span class="hljs-string">'y': <span class="hljs-number">2}
b = { <span class="hljs-string">'y': <span class="hljs-number">3, <span class="hljs-string">'z': <span class="hljs-number">4}
print(merge_dictionaries(a, b))
{<span class="hljs-string">'y': <span class="hljs-number">3, <span class="hljs-string">'x': <span class="hljs-number">1, <span class="hljs-string">'z': <span class="hljs-number">4}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 将两个列表转化为字典
如下方法将会把两个列表转化为单个字典。
def to_dictionary(<span class="hljs-keyword">keys, <span class="hljs-keyword">values):
<span class="hljs-keyword">return dict(zip(<span class="hljs-keyword">keys, <span class="hljs-keyword">values))
<span class="hljs-keyword">keys = [<span class="hljs-string">"a", <span class="hljs-string">"b", <span class="hljs-string">"c"]
<span class="hljs-keyword">values = [<span class="hljs-number">2, <span class="hljs-number">3, <span class="hljs-number">4]
<span class="hljs-keyword">print(to_dictionary(<span class="hljs-keyword">keys, <span class="hljs-keyword">values))
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 使用枚举
我们常用 For 循环来遍历某个列表,同样我们也能枚举列表的索引与值。
list = [<span class="hljs-string">"a", <span class="hljs-string">"b", <span class="hljs-string">"c", <span class="hljs-string">"d"]
<span class="hljs-keyword">for index, element in enumerate(list):
<span class="hljs-built_in">print(<span class="hljs-string">"Value", element, <span class="hljs-string">"Index ", index, )
(<span class="hljs-string">'Value', <span class="hljs-string">'a', <span class="hljs-string">'Index ', <span class="hljs-number">0)
(<span class="hljs-string">'Value', <span class="hljs-string">'b', <span class="hljs-string">'Index ', <span class="hljs-number">1)
#(<span class="hljs-string">'Value', <span class="hljs-string">'c', <span class="hljs-string">'Index ', <span class="hljs-number">2)
(<span class="hljs-string">'Value', <span class="hljs-string">'d', <span class="hljs-string">'Index ', <span class="hljs-number">3)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 执行时间
如下代码块可以用来计算执行特定代码所花费的时间。
import <span class="hljs-built_in">time
start_time = <span class="hljs-built_in">time.<span class="hljs-built_in">time()
a = <span class="hljs-number">1
b = <span class="hljs-number">2
c = a + b
<span class="hljs-built_in">print(c) #<span class="hljs-number">3
end_time = <span class="hljs-built_in">time.<span class="hljs-built_in">time()
total_time = end_time - start_time
<span class="hljs-built_in">print(<span class="hljs-string">"Time: ", total_time)
(<span class="hljs-string">'Time: ', <span class="hljs-number">1.1205673217773438e-05)</span></span></span></span></span></span></span></span></span></span></span></span></span>
23.Try else
我们在使用 try/except 语句的时候也可以加一个 else 子句,如果没有触发错误的话,这个子句就会被运行。
<span class="hljs-keyword">try:
<span class="hljs-number">2*<span class="hljs-number">3
<span class="hljs-keyword">except TypeError:
print(<span class="hljs-string">"An exception was raised")
<span class="hljs-keyword">else:
print(<span class="hljs-string">"Thank God, no exceptions were raised.")
</span></span></span></span></span></span></span>
- 元素频率
下面的方法会根据元素频率取列表中最常见的元素。
def most_frequent(<span class="hljs-keyword">list):
<span class="hljs-keyword">return max(set(<span class="hljs-keyword">list), key = <span class="hljs-keyword">list.count)
<span class="hljs-keyword">list = [<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">1,<span class="hljs-number">2,<span class="hljs-number">3,<span class="hljs-number">2,<span class="hljs-number">1,<span class="hljs-number">4,<span class="hljs-number">2]
most_frequent(<span class="hljs-keyword">list)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 回文序列
以下方法会检查给定的字符串是不是回文序列,它首先会把所有字母转化为小写,并移除非英文字母符号。最后,它会对比字符串与反向字符串是否相等,相等则表示为回文序列。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">palindrome<span class="hljs-params">(string):
<span class="hljs-keyword">from re <span class="hljs-keyword">import sub
s = sub(<span class="hljs-string">'[\W_]', <span class="hljs-string">'', string.lower())
<span class="hljs-keyword">return s == s[::<span class="hljs-number">-1]
palindrome(<span class="hljs-string">'taco cat') </span></span></span></span></span></span></span></span></span></span></span>
- 不使用 if-else 的计算子
这一段代码可以不使用条件语句就实现加减乘除、求幂操作,它通过字典这一数据结构实现:
<span class="hljs-keyword">import <span class="hljs-keyword">operator
action = {
<span class="hljs-string">"+": <span class="hljs-keyword">operator.add,
<span class="hljs-string">"-": <span class="hljs-keyword">operator.sub,
<span class="hljs-string">"/": <span class="hljs-keyword">operator.truediv,
<span class="hljs-string">"*": <span class="hljs-keyword">operator.mul,
<span class="hljs-string">"**": <span class="hljs-built_in">pow
}
print(action[<span class="hljs-string">'-'](<span class="hljs-number">50, <span class="hljs-number">25)) # <span class="hljs-number">25</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
27.Shuffle
该算法会打乱列表元素的顺序,它主要会通过 Fisher-Yates 算法对新列表进行排序:
<span class="hljs-attr">from <span class="hljs-string">copy import deepcopy
<span class="hljs-attr">from <span class="hljs-string">random import randint
<span class="hljs-attr">def <span class="hljs-string">shuffle(lst):
<span class="hljs-attr">temp_lst = <span class="hljs-string">deepcopy(lst)
<span class="hljs-attr">m = <span class="hljs-string">len(temp_lst)
<span class="hljs-attr">while <span class="hljs-string">(m):
<span class="hljs-attr">m <span class="hljs-string">-= 1
<span class="hljs-attr">i = <span class="hljs-string">randint(0, m)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 展开列表
将列表内的所有元素,包括子列表,都展开成一个列表。
<span class="hljs-attr">def <span class="hljs-string">spread(arg):
<span class="hljs-attr">ret = <span class="hljs-string">[]
<span class="hljs-attr">for <span class="hljs-string">i in arg:
<span class="hljs-attr">if <span class="hljs-string">isinstance(i, list):
<span class="hljs-attr">ret.extend(i)
<span class="hljs-attr">else:<span class="hljs-string">
<span class="hljs-attr">ret.append(i)
<span class="hljs-attr">return <span class="hljs-string">ret
</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
- 交换值
不需要额外的操作就能交换两个变量的值。
<span class="hljs-function"><span class="hljs-keyword">def <span class="hljs-title">swap<span class="hljs-params">(a, b):
<span class="hljs-keyword">return b, a
a, b = <span class="hljs-number">-1, <span class="hljs-number">14
swap(a, b) </span></span></span></span></span></span></span>
- 字典默认值
通过 Key 取对应的 Value 值,可以通过以下方式设置默认值。如果 get() 方法没有设置默认值,那么如果遇到不存在的 Key,则会返回 None。
d = {<span class="hljs-string">'a': 1, <span class="hljs-string">'b': 2}
<span class="hljs-built_in">print(d.get(<span class="hljs-string">'c', 3)) </span></span></span></span>
非常感谢点赞/转发的各位~
Original: https://www.cnblogs.com/sn5200/p/15912528.html
Author: Python可乐的呀
Title: 30段极简Python代码,30秒学一个实用技巧
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/814912/
转载文章受原作者版权保护。转载请注明原作者出处!