一些實驗中用過的python函數/方法(持續更新)

来源:https://www.cnblogs.com/qftie/archive/2022/05/21/16294106.html
-Advertisement-
Play Games

衡量運行時間 很多時候你需要計算某段代碼執行所需的時間,可以使用 time 模塊來實現這個功能。 import time startTime = time.time() # write your code or functions calls endTime = time.time() totalT ...


衡量運行時間

很多時候你需要計算某段代碼執行所需的時間,可以使用 time 模塊來實現這個功能。

import time

startTime = time.time()

# write your code or functions calls

endTime = time.time()
totalTime = endTime - startTime

print("Total time required to execute code is =", totalTime)

# output
Total time required to execute code is = 4.76837158203125e-07

獲取兩個列表之間的差異

不使用迴圈,找出兩個列表的差異,可以使用集合的 symmetric_difference 方法。

list1 = ['Scott', 'Eric', 'Kelly', 'Emma', 'Smith']
list2 = ['Scott', 'Eric', 'Kelly']

set1 = set(list1)
set2 = set(list2)

list3 = list(set1.symmetric_difference(set2))
print(list3)

# output
['Emma', 'Smith']

翻轉字元串和列表

a = "zhihu"
print("Reverse is", a[::-1])
List = ["Shriya", "Lavina", "Sampreeti" ]
List.reverse()
print(List)

# output
Reverse is uhihz
['Sampreeti', 'Lavina', 'Shriya']

連接列表中的多個字元串

需要調用字元串的 join 方法,還可以設置間隔符,下麵為間隔符為空格的例子。

a = ["Python", "Is", "Great"] 
print(" ".join(a))

# output
Python Is Great

同時使用多個比較運算符

在 C 中不能連續進行大小比較,在 Python 中就可以。

n = 10
result = 1 < n < 20
print(result) 
result = 1 < n <= 9
print(result)

# output
True
False

列印導入模塊的文件路徑

import os 
import socket 

print(os) 
print(socket)

# output
<module 'os' from 'D:\\Users\\xxx\\miniconda3\\envs\\xin\\lib\\os.py'>
<module 'socket' from 'D:\\Users\\xxx\\miniconda3\\envs\\xin\\lib\\socket.py'>

二維列表轉一維列表

只需使用 Itertools 一行代碼,即可將嵌套列表轉換為一個列表。

import itertools  
a = [[1, 2], [3, 4], [5, 6]] 
print(list(itertools.chain.from_iterable(a))) 

# output
[1, 2, 3, 4, 5, 6]

Lambda 匿名函數用法

要聲明一些小功能,但不使用常規的聲明方式,可以用使用 lambda。 python 中的 lambda 關鍵字為聲明匿名函數提供了快捷方式。

subtract = lambda x, y : x-y
subtract(5, 4)
# 可結合map reduce使用

列表中每個元素出現次數

Counter(list).most_common(n) 根據列表 / 字元串中每個元素出現次數,降序返回列表 / 字元串中的前 n 個元素,其中 n 是指定的數字。在元組中返回各個元素及其出現的次數。

# Code to find top 3 elements and their counts 
# using most_common 
from collections import Counter 
  
arr = [1, 3, 4, 1, 2, 1, 1, 3, 4, 3, 5, 1, 2, 5, 3, 4, 5] 
counter = Counter(arr) 
top_three = counter.most_common(3) 
print(top_three) 

# output
[(1, 5), (3, 4), (4, 3)]

輸出結果為個數最多的 3 個數字,其中 1 出現 5 次,3 出現 4 次,4 出現 3 次。

找到列表中最常出現的值

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4] 
print(max(set(test), key = test.count))
# max(test, key = test.count) 也可以實現同樣功能,但列表數據量大時會變慢
# s.count(x) x在s中出現的總次數
# output
4

檢查對象的記憶體使用情況

當你要使用任何數據結構(例如列表,字典或任何對象)來存儲值或記錄時,可以檢查數據結構使用了多少記憶體。

使用 sys 模塊中定義的 sys.getsizeof 函數獲取內置對象使用的記憶體,返回對象的大小(以位元組為單位)。

import sys 
x = 1
print(sys.getsizeof(x)) 

# output
28

註意:sys.getsizeof 不會為第三方對象或用戶定義的對象返回正確的值。

字元串乘法拼接

n = 3
a = "Python"
print(a * n)

# output
PythonPythonPython

將多個列表同一位置元素zip在一起

當你需要連接許多迭代器對象(如列表)以獲取單個列表時,可以使用 zip 函數,結果顯示每個新列表每個元素,是所有迭代器對象同一位置值的元組。

Year = (1999, 2003, 2011, 2017)
Month = ("Mar", "Jun", "Jan", "Dec")
Day = (11,21,13,5)
print(zip(Year, Month, Day))

# output
[(1999, 'Mar', 11), (2003, 'Jun', 21), (2011, 'Jan', 13), (2017, 'Dec', 5)]

.get獲取字典中key對應的值,不存在則返回指定值

通過 [] 方式獲取字典中的值時,如果鍵不存在則會報錯,可以使用字典的 get 函數,指定鍵不存在時,可以返回的值。

比如字典中有鍵 ‘c’,則返回對應的值,否則返回 3。

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

# output
3

for...else...

Python 中的 for 迴圈可以使用 else 關鍵字,如果在 for 迴圈中遇到 break 跳出迴圈,則不執行 else 子句,否則執行。

for i in range(5):
    pass
else:
    pass

{**d1, **d2}合併字典

d1 = {'a': 1}
d2 = {'b': 2}
print({**d1, **d2})

# output
{'a': 1, 'b': 2}

求列表中前 n 個最大 / 最小的數字

使用 heapq 返回任何列表中的前 n 個最小 / 最大元素,這裡 n 是指定的數字。

# Python code to find 3 largest and 4 smallest
# elements of a list.
import heapq
  
grades = [110, 25, 38, 49, 20, 95, 33, 87, 80, 90]
print(heapq.nlargest(3, grades))
print(heapq.nsmallest(4, grades))

# output
[110, 95, 90]
[20, 25, 33, 38]

輸出的第一行給出列表等級中存在的最大數字中的 3 個。 同樣,輸出的第二行將列印出列表等級中存在的最小元素中的 4 個,此功能的另一個特點是它不會忽略重覆值。

x, y = y, x 就地交換兩個數字

x, y = 10, 20
print(x, y) 
x, y = y, x 
print(x, y) 

# output
10 20
20 10

set(listNumbers)從列表中刪除重覆項

listNumbers = [20, 22, 24, 26, 28, 28, 20, 30, 24]
print("Original= ", listNumbers)

listNumbers = list(set(listNumbers))
print("After removing duplicate= ", listNumbers)

# output
Original=  [20, 22, 24, 26, 28, 28, 20, 30, 24]
After removing duplicate=  [20, 22, 24, 26, 28, 30]

比較兩個無序列表

假設你有兩個包含相同元素的列表,但是兩個列表中的元素順序都不同。可以使用 collections.Counter()方法進行判斷,確定它們是否元素值都相同。

from collections import Counter

one = [33, 22, 11, 44, 55]
two = [22, 11, 44, 55, 33]

print("two lists are equal.", Counter(one) == Counter(two))

# output
two lists are equal.

檢查列表中的所有元素是否唯一

def isUnique(item):
    tempSet = set()
    return not any(i in tempSet or tempSet.add(i) for i in item)

listOne = [123, 345, 456, 23, 567]
print("All List elemtnts are Unique ", isUnique(listOne))

listTwo = [123, 345, 567, 23, 567]
print("All List elemtnts are Unique ", isUnique(listTwo))

# output
All List elemtnts are Unique  True
All List elemtnts are Unique  False

位元組轉換為字元串

要將位元組轉換為字元串,可以對 bytes 對象進行解碼以生成字元串。

byteVar = b"pynative"
str = str(byteVar.decode("utf-8"))
print("Byte to string is" , str )

# output
Byte to string is pynative

dict(zip(ItemId, names))將兩個列表轉換成字典

例如你有兩個列表,一個列表包含鍵,第二個列表包含對應的值,想將這兩個列表轉換為一個字典。可以使用 zip 函數來進行實現。

ItemId = [54, 65, 76]
names = ["Hard Disk", "Laptop", "RAM"]

itemDictionary = dict(zip(ItemId, names))

print(itemDictionary)

# output
{54: 'Hard Disk', 65: 'Laptop', 76: 'RAM'}

設置小數位格式

你要顯示帶有 2 個小數位的任何浮點數。 例如 73.4(73.40)和 288.5400(88.54)。

number= 88.2345
print('{0:.2f}'.format(number))

s.ljust(10, '-') 字元串左對齊填充到10

左對齊函數 ljust 和右對齊函數 rjust,都需要指定字元串長度,以及想要填充的字元,不指定則預設填充空格。

s = "12345"
print(s.ljust(10, '-'))
print(s.rjust(10, '0'))

# output
12345-----
0000012345

https://www.zhihu.com/people/zhao-xiao-de-93/posts


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • in操作符作用: 遍歷類型 基本用法 type roles = "tester" | "developer" | "manager"; const staffCount: { [k in roles]: number } = { tester: 100, developer: 200, manage ...
  • 索引:對象或數組的對應位置的名字 數組的索引就是 number 類型的 0,1,2,3... 對象的索引就是 string 類型的屬性名 數字索引簽名:通過定義介面用來約束數組 type numberIndex{ [index:number]:string } const testArray:num ...
  • DRY原則 DRY 原則,它的英文描述為:Don’t Repeat Yourself。中文直譯為:不要重覆自己。也可以理解為:不要寫重覆的代碼。 我們從實現邏輯重覆、功能語義重覆和代碼執行重覆,這三種代碼重覆來說明DRY原則。 實現邏輯重覆 例如有兩個函數isValidUserName() 和 is ...
  • 從演化歷史看大型網站架構 楊傳偉 (石家莊鐵道大學信息科學與技術學院,河北省,石家莊市,050043) 摘 要:本文以大型網站系統的特點、大型網站架構演化發展歷程以及大數據與高併發為切入和論述點,由淺入深、由簡到繁地對大型網站架構設計展開敘述,首先通述其特點,之後介紹大型網站架構的歷史發展歷程,從其 ...
  • 一些必須提前知道的概念 patition kafka日誌文件是以patition在物理存儲上分割的 是topic物理上的分組,一個topic可以分為多個partition,每個partition是一個有序的隊列 是以文件夾的形式存儲在具體Broker本機上 LEO 表示每個partition的log ...
  • MVC架構設計淺析 楊傳偉 (石家莊鐵道大學信息科學與技術學院,河北省,石家莊市,050043) 摘 要:本文以圖書管理系統為案例(當前主流框架SpringMVC的原理來分析MVC的設計理念等),深入淺出地分析常用的WEB設計模式MVC。將從MVC的歷史、MVC每一層的作用,MVC能為我們帶來什麼好 ...
  • 單例模式 單例模式一般用於全局只需要一個唯一的實例的情況。 例如說,日誌讀寫的功能,一般來說全局只需一個日誌讀寫實例,然後其他的類實例去獲取這個實例進行日誌讀寫。 又例如說,有一個協作的功能,需要各個模塊發送給主控制器,主控制器需要做成單例,這樣子模塊之間操作控制器就是操作實際主控制器的內容。 怎麼 ...
  • 操作系統:Windows10 Python版本:3.9.2 vosk是一個離線開源語音識別工具,它可以識別16種語言,包括中文。 這裡記錄下使用vosk進行中文識別的過程,以便後續查閱。 vosk地址:https://alphacephei.com/vosk/ 使用vosk-server進行語音識別 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...