15段極簡Python程式碼:這些小技巧你都Get了嗎?

  • 2020 年 2 月 10 日
  • 筆記

Python 是機器學習最廣泛採用的程式語言,它最重要的優勢在於編程的易用性。如果讀者對基本的 Python 語法已經有一些了解,那麼這篇文章可能會給你一些啟發。作者簡單概覽了 30 段程式碼,它們都是平常非常實用的技巧,我們只要花幾分鐘就能從頭到尾瀏覽一遍。

1. 重複元素判定

以下方法可以檢查給定列表是不是存在重複元素,它會使用 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) # False  all_unique(y) # True

2. 字元元素組成判定

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

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

3. 記憶體佔用

下面的程式碼塊可以檢查變數 variable 所佔用的記憶體。

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

4. 位元組佔用

下面的程式碼塊可以檢查字元串佔用的位元組數。

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

5. 列印 N 次字元串

該程式碼塊不需要循環語句就能列印 N 次字元串。

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

6. 大寫第一個字母

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

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

7. 分塊

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

from math import ceil  def 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]

8. 壓縮

這個方法可以將布爾型的值去掉,例如(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 ]

9. 解包

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

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

10. 鏈式對比

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

a = 3  print( 2 < a < 8) # True  print(1 == a < 2) # False

11. 逗號連接

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

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

12. 母音統計

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

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

13. 首字母小寫

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

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

14. 展開列表

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

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

15. 列表的差

該方法將返回第一個列表的元素,其不在第二個列表內。如果同時要回饋第二個列表獨有的元素,還需要加一句 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]) # [3]

End.

來源:簡書