30個Python常用極簡代碼,拿走就用

2021-02-19 Python頭條

點擊「Python頭條」,選擇「星標🔝」

學 Python 怎樣才最快,當然是實戰各種小項目,只有自己去想與寫,才記得住規則。本文是 30 個極簡任務,初學者可以嘗試著自己實現;本文同樣也是 30 段代碼,Python 開發者也可以看看是不是有沒想到的用法。

以下方法可以檢查給定列表是不是存在重複元素,它會使用 set() 函數來移除所有重複元素。

def all_unique(lst):return len(lst)== len(set(lst))x = [1,1,2,2,3,2,3,4,5,6]y = [1,2,3,4,5]all_unique(x) # Falseall_unique(y) # True

檢查兩個字符串的組成元素是不是一樣的。

from collections import Counterdef anagram(first, second):return Counter(first) == Counter(second)anagram("abcd3", "3acdb") # True

import sysvariable = 30print(sys.getsizeof(variable)) # 24

下面的代碼塊可以檢查字符串佔用的字節數。

def byte_size(string):return(len(string.encode('utf-8')))byte_size('') # 4byte_size('Hello World') # 11

該代碼塊不需要循環語句就能列印 N 次字符串。

n = 2s ="Programming"print(s * n)# ProgrammingProgramming

以下代碼塊會使用 title() 方法,從而大寫字符串中每一個單詞的首字母。

s = "programming is awesome"print(s.title())# Programming Is Awesome

給定具體的大小,定義一個函數以按照這個大小切割列表。

from math import ceildef chunk(lst, size):return list(map(lambda x: lst[x * size:x * size + size],list(range(0, ceil(len(lst) / size)))))chunk([1,2,3,4,5],2)# [[1,2],[3,4],5]

這個方法可以將布爾型的值去掉,例如(False,None,0,「」),它使用 filter() 函數。

def compact(lst):return list(filter(bool, lst))compact([0, 1, False, 2, '', 3, 'a', 's', 34])# [ 1, 2, 3, 'a', 's', 34 ]

如下代碼段可以將打包好的成對列表解開成兩組不同的元組。

array = [['a', 'b'], ['c', 'd'], ['e', 'f']]transposed = zip(*array)print(transposed)# [('a', 'c', 'e'), ('b', 'd', 'f')]

我們可以在一行代碼中使用不同的運算符對比多個不同的元素。

a = 3print( 2 < a < 8) print(1 == a < 2) 

下面的代碼可以將列表連接成單個字符串,且每一個元素間的分隔方式設置為了逗號。

hobbies = ["basketball", "football", "swimming"]print("My hobbies are: " + ", ".join(hobbies))# My hobbies are: basketball, football, swimming

以下方法將統計字符串中的元音 (『a』, 『e』, 『i』, 『o』, 『u』) 的個數,它是通過正則表達式做的。

import redef count_vowels(str):return len(len(re.findall(r'[aeiou]', str, re.IGNORECASE)))count_vowels('foobar') count_vowels('gym') 

如下方法將令給定字符串的第一個字符統一為小寫。

def decapitalize(string):return str[:1].lower() + str[1:]decapitalize('FooBar') decapitalize('FooBar') 

該方法將通過遞歸的方式將列表的嵌套展開為單個列表。

def spread(arg):ret = []for i in arg:if isinstance(i, list):ret.extend(i)else:ret.append(i)return retdef deep_flatten(lst):result = []result.extend(spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst))))return resultdeep_flatten([1, [2], [[3], 4], 5]) 

該方法將返回第一個列表的元素,其不在第二個列表內。如果同時要反饋第二個列表獨有的元素,還需要加一句 set_b.difference(set_a)。

def difference(a, b):set_a = set(a)set_b = set(b)comparison = set_a.difference(set_b)return list(comparison)difference([1,2,3], [1,2,4]) 

如下方法首先會應用一個給定的函數,然後再返回應用函數後結果有差別的列表元素。

def difference_by(a, b, fn):b = set(map(fn, b))return [item for item in a if fn(item) not in b]from math import floordifference_by([2.1, 1.2], [2.3, 3.4],floor) difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x'])# [ { x: 2 } ]

你可以在一行代碼內調用多個函數。

def add(a, b):return a + bdef subtract(a, b):return a - ba, b = 4, 5print((subtract if a > b else add)(a, b)) 

如下代碼將檢查兩個列表是不是有重複項。

def has_duplicates(lst):return len(lst) != len(set(lst))x = [1,2,3,4,5,5]y = [1,2,3,4,5]has_duplicates(x) has_duplicates(y) 

下面的方法將用於合併兩個字典。

def merge_two_dicts(a, b):c = a.copy() c.update(b) return ca={'x':1,'y':2}b={'y':3,'z':4}print(merge_two_dicts(a,b))#{'y':3,'x':1,'z':4}

在 Python 3.5 或更高版本中,我們也可以用以下方式合併字典:

def merge_dictionaries(a, b)return {**a, **b}a = { 'x': 1, 'y': 2}b = { 'y': 3, 'z': 4}print(merge_dictionaries(a, b))# {'y': 3, 'x': 1, 'z': 4}


如下方法將會把兩個列錶轉化為單個字典。

def to_dictionary(keys, values):return dict(zip(keys, values))keys = ["a", "b", "c"]values = [2, 3, 4]print(to_dictionary(keys, values))#{'a': 2, 'c': 4, 'b': 3}

我們常用 For 循環來遍歷某個列表,同樣我們也能枚舉列表的索引與值。

list = ["a", "b", "c", "d"]for index, element in enumerate(list): print("Value", element, "Index ", index, )# ('Value', 'a', 'Index ', 0)# ('Value', 'b', 'Index ', 1)#('Value', 'c', 'Index ', 2)# ('Value', 'd', 'Index ', 3)


如下代碼塊可以用來計算執行特定代碼所花費的時間。

import timestart_time = time.time()a = 1b = 2c = a + bprint(c) end_time = time.time()total_time = end_time - start_timeprint("Time: ", total_time)# ('Time: ', 1.1205673217773438e-05) 

我們在使用 try/except 語句的時候也可以加一個 else 子句,如果沒有觸發錯誤的話,這個子句就會被運行。

try:2*3except TypeError:print("An exception was raised")else:print("Thank God, no exceptions were raised.")#Thank God, no exceptions were raised.

下面的方法會根據元素頻率取列表中最常見的元素。

def most_frequent(list):return max(set(list), key = list.count)list = [1,2,1,2,3,2,1,4,2]most_frequent(list)

以下方法會檢查給定的字符串是不是迴文序列,它首先會把所有字母轉化為小寫,並移除非英文字母符號。最後,它會對比字符串與反向字符串是否相等,相等則表示為迴文序列。

def palindrome(string):from re import subs = sub('[\W_]', '', string.lower())return s == s[::-1]palindrome('taco cat') 

這一段代碼可以不使用條件語句就實現加減乘除、求冪操作,它通過字典這一數據結構實現:

import operatoraction = {"+": operator.add,"-": operator.sub,"/": operator.truediv,"*": operator.mul,"**": pow}print(action['-'](50, 25)) # 25

該算法會打亂列表元素的順序,它主要會通過 Fisher-Yates 算法對新列表進行排序:

from copy import deepcopyfrom random import randintdef shuffle(lst):temp_lst = deepcopy(lst)m = len(temp_lst)while (m):m -= 1i = randint(0, m)temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m]return temp_lstfoo = [1,2,3]shuffle(foo) # [2,3,1] , foo = [1,2,3]

將列表內的所有元素,包括子列表,都展開成一個列表。

def spread(arg):ret = []for i in arg:if isinstance(i, list):ret.extend(i)else:ret.append(i)return retspread([1,2,3,[4,5,6],[7],8,9]) 

不需要額外的操作就能交換兩個變量的值。

def swap(a, b):return b, aa, b = -1, 14swap(a, b) spread([1,2,3,[4,5,6],[7],8,9]) 

通過 Key 取對應的 Value 值,可以通過以下方式設置默認值。如果 get() 方法沒有設置默認值,那麼如果遇到不存在的 Key,則會返回 None。

d = {'a': 1, 'b': 2}print(d.get('c', 3)) # 3

文 | Fatos Morina

來源:Python 技術

分享、點讚、在看,給個三連擊唄!👇 

相關焦點

  • 30個極簡Python代碼,拿走即用
    本文是 30 個極簡任務,初學者可以嘗試著自己實現;本文同樣也是 30 段代碼,Python 開發者也可以看看是不是有沒想到的用法。以下方法可以檢查給定列表是不是存在重複元素,它會使用 set() 函數來移除所有重複元素。
  • 30個Python極簡代碼,10分鐘get常用技巧!
    本文是 30 個極簡任務,初學者可以嘗試著自己實現;本文同樣也是 30 段代碼,Python 開發者也可以看看是不是有沒想到的用法。作者簡單概覽了 30 段代碼,它們都是平常非常實用的技巧,我們只要花幾分鐘就能從頭到尾瀏覽一遍。以下方法可以檢查給定列表是不是存在重複元素,它會使用 set() 函數來移除所有重複元素。
  • 30個Python極簡代碼,10分鐘get常用技巧
    本文是 30 個極簡任務,初學者可以嘗試著自己實現;本文同樣也是 30 段代碼,Python 開發者也可以看看是不是有沒想到的用法。作者簡單概覽了 30 段代碼,它們都是平常非常實用的技巧,我們只要花幾分鐘就能從頭到尾瀏覽一遍。重複元素判定以下方法可以檢查給定列表是不是存在重複元素,它會使用 set() 函數來移 除所有重複元素。
  • 30段極簡Python代碼:這些小技巧你都Get了麼
    本文是 30 個極簡任務,初學者可以嘗試著自己實現;本文同樣也是 30 段代碼,Python 開發者也可以看看是不是有沒想到的用法。Python 是機器學習最廣泛採用的程式語言,它最重要的優勢在於編程的易用性。如果讀者對基本的 Python 語法已經有一些了解,那麼這篇文章可能會給你一些啟發。
  • 50行python代碼寫個計算器教程
    input輸入在python中咱們用input來獲取用輸入的內容,默認input只能獲取文本,想要轉換為數字需要用int函數把字符串轉換為字符輸出我們在python3中用print方法輸出tkinter圖形界面Tkinter 是 Python 的標準 GUI 庫。Python 使用 Tkinter 可以快速的創建 GUI 應用程式。
  • Python驗證常見的50個正則表達式,代碼拿走就用
    本文收集了一些常見的正則表達式用法,方便大家查詢取用,並在最後附了詳細的正則表達式語法手冊。案例包括:「郵箱、身份證號、手機號碼、固定電話、域名、IP位址、日期、郵編、密碼、中文字符、數字、字符串」Python如何支持正則?
  • 代碼詳解:如何用Python運行高性能的數學範式?
    首先需要明確的是:編寫python代碼和編寫pythonic代碼之間存在很大差異。這篇文章圍繞一些最常用的數據科學操作編寫了最佳(也存在爭議的)實踐。下面是在Github上運行的連結,用於整個代碼基礎:harshitcodes/python_paradigmsA guide to: How to compare different implementation paradigms
  • 極簡python教程:快速入門好方法
    其實很久之前,就有身邊的同事或者網友讓我分享一些關於python程式語言的快速教程,他們的痛點同大多數自學程式語言的人一樣,遇到了這些問題:網絡上的信息太多,良莠不全,不知道如何分辨;初學時「冗餘」知識太多,不知道該學些什麼
  • python機器學習:常用庫的介紹及安裝
    用Anacond安裝Numpy庫3、代碼編寫是python版本的選擇,python是一個比較特殊的群體,一般語言的各大版本都是向下兼容的,但是python大半本為python3.x的是不兼容python2.x得,所以在寫代碼之前要確認後面的代碼要使用
  • 這25條極簡Python代碼,你還不知道
    >自從我用Python編寫第一行代碼以來,就被它的簡單性、出色的可讀性和特別流行的一行代碼所吸引。如果你嘗試用其他語言來做,你可能需要寫10行代碼,但是使用Python,我們可以只用一行代碼就實現FizzBuzz。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 30、獲取昨天的日期
  • @Python 開發者,如何更加高效地編寫代碼?
    如果你熟悉 virtualenv,那麼上手 conda 非常容易,不熟悉 virtulenv 的也沒關係,它提供的命令就幾個,非常簡單。我們可以利用 conda 的虛擬環境管理功能在 Python2 和 Python3 之間自由切換。
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    其實某個特定程序(無論使用何種程式語言)的運行速度是快還是慢,在很大程度上取決於編寫該程序的開發人員自身素質,以及他們編寫優化而高效代碼的能力。Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。
  • 用一行python代碼輕鬆解決,沒想到它這麼強
    python無所不能,是python之父GuidovanRossum的一個朋友說的。而python有多無所不能呢?下面羽憶教程為你展示一行python代碼可以做到輸出九九乘法表,甚至更多喪心病狂的事情,用python一行代碼統統搞定。
  • Python代碼調試的那些「最少且必要」技巧
    因此,我們需要掌握一些代碼調試的基本技巧。本文選自《Python極簡講義:一本書入門數據分析與機器學習》一書。這是一本圖文並茂、簡單易讀的Python極簡講義,以掌握「最少必要知識」為寫作理念,對初學者十分友好!第一種方法,簡單而有效,直接而粗暴,就是用print()把需要觀察的變量列印出來,如下所示。
  • python小課堂17 - 30行代碼破解加密ZIP文件
    通過這樣的思想,我們可以通過讀取一個字典文件(字典文件就是包含各種弱密碼的一個txt文本文件),用for循環讀取此文件來實現循環嘗試。但是python單線程跑比較大的字典文本會非常耗時,所以此程序採用多線程來實現調用。
  • 如何用iPad運行Python代碼?
    只要你的設備上有個現代化瀏覽器(包括但不限於Google Chrome, Firefox, Safari和Microsoft Edge等)就行。IE 8.0?那個不行,趕緊升級吧!讀到這裡,你應該想明白了。因為只挑瀏覽器,不挑作業系統,所以別說你用Windows 10,你就是用iPad,都能運行代碼。
  • python String模塊在實際應用的代碼介紹
    python String模塊在實際應用的代碼介紹 本文以python String模塊的相關代碼的方式來介紹python String模塊的具體應用方法的介紹,那麼下面的文章就讓我們一起分享吧!
  • 10個好用的Python集成開發環境
    Wing IDE分三個版本:免費的基礎版,個人版,以及更強大的專業版。調試功能是Wing IDE的一大亮點,包括多線程調試,線程代碼調試,自動子進程調試,斷點,單步代碼調試,代碼數據檢查等功能,此外還提供了在樹莓派上進行遠程調試的功能。
  • 八行python代碼展現程式設計師從入門到大神的八種階段
    人生苦短,我用python。python的世界裡無處不在的簡潔和短小,往往一行代碼可以實現很多有意思功能。你敢想像你從入門python代碼、網絡達人、反重力怪才、愛情自由怪、資源盜獵者、頓悟入禪、無所不能或者卷鋪跑路8個狀態只用了簡簡單單的8行代碼嗎?