• 首頁
  • About Me

懶泥陳的技術手札

Python、AI、與資料分析

Python

Python – 格式化字串的方式

21 2 月, 2022 by lenny0929 Leave a Comment
python basic

Python 有三種格式化字串的方式,其中一種與 C++ 類似,使用 % 算符來格式化字串,是 Python 早期版本的標準。

print("%s 是 %s 而不是 %s" % ("老王", "樂團", "賣西瓜的"))
>>> 老王 是 樂團 而不是 賣西瓜的

前面先用兩個 ” 將字串建立,而後面接一個 % 後接要塞入的文字、變數,會一個對一個的將文字更換。

目前這種寫法已經不流行了,比較 Pythonic 的寫法是使用 format 或者是 f-string

使用 format() 來格式化字串是比較通用的做法,相對來說也可以支援比較多的版本,語法如下:

“格式化字串”.format( 參數值 )

print("{} 是 {} 而不是 {}".format("老王", "樂團", "賣西瓜的") )
>>> 老王 是 樂團 而不是 賣西瓜的

f-string 的作法在 Python 3.6 以後支援

str1 = "老王" 
str2 = "樂團"
str3 = "賣西瓜的" 
print( f"{str1} 是 {str2} 而不是 {str3}" )
>>> 老王 是 樂團 而不是 賣西瓜的

基本上跟 format 一樣簡單好用,還更方便閱讀。

Posted in: Python, 技術 Tagged: python, string

Python – List 的用法與常用操作

21 2 月, 2022 by lenny0929 Leave a Comment
python basic

Python 中的 list 是一種常用的資料結構,經過語言優化後功能強大。 List 跟 C++的陣列 array 很類似,是由有順序的 element 所匯集而成。

可以用 [ ] 括號來建立 list,其中的元素必須以逗號分隔。

# 建立三個元素的 list, 並且命名為 alist
alist = [ 1, 2, 3]

list 與陣列不同的地方在於 list 的每個元素可以是不同型別的元素,例如混雜字串與數字的陣列。

combined_list = [1, "One", 2, "Two"] 

list 的取用使用索引 index, 索引可以從 0 -> 元素數量 -1,或者反過來,從 -1 (最後一個) 到 – ( 元素數量)。

>>> alist = [ 1, 2, 3]
>>> alist[0] 
1
>>> alist[-1]
3

List 的切片有頭無尾

list 的切片是 Python 的特色用法,比起許多語言而言易用且容易理解,而需要記住的莫過於切片有頭無尾。

使用切片的用法是用 : 來分隔頭尾,假設上面的例子 alist 需要前面兩個元素,可以使用下面的做法

>>> another_list = alist[0:2]
>>> another_list 
[ 1, 2 ]

[ m:n ] 可以切出由 m到n,但不包含 n 的片段,這樣有頭無尾的設計可以讓 [ m:n ] 的切片長度直接就是 n-m,可以減少bug的產生。

List 常用操作

append() 可以將元素附加到 list 的末端。

insert( index, element ) 可以將 element 插入進指定索引處,而原本的索引所在元素都會往後一位。

x = [1,2,3]
x.insert("new element", 2)
>> x 
>> [1, 2, "new element", 3]

sort() List的排序使用 sort()方法,sort會直接將原本的list做排序,改變其順序。預設sort()的排序由小到大、字母由 a->z。 也可以傳入函式讓 sort() 去做自定義的排序。 p.s 自定義排序較慢。

def compare_len(string_element) : 
    return len(string_element)
word_list = ["Which", "string", "is", "longer?"]
word_list.sort()
print(word_list)
>>> ['Which', 'is', 'longer?', 'string']

word_list.sort(key = compare_len)
print(word_list)
>>> ['is', 'Which', 'string', 'longer?']

sorted() 會回傳一個排好序的list,而不會更改原本的 list。

in 算符可以測試 list 的某個元素是否存在。

用 index() 可以找出元素在 list 的索引值,通常使用前需要先使用 in 算符確認有存在後再使用,如果該元素沒有 index值會發出錯誤。

list 的淺層拷貝可以使用 x[:] 來複製整個x的list。 但如果 list 中的元素有好幾層,則需要使用深層拷貝 deepcopy ( 需要先import copy )。

import copy
original = [[0], 1, [2,3, [4] ]]
deep = copy.deepcopy( original )

Posted in: Python, 學習 Tagged: list, python

Python – 命名慣例與風格

9 2 月, 2022 by lenny0929 Leave a Comment
python basic

Python 的程式撰寫風格慣例詳細被記載在 PEP8 (Python Enhancement Proposal) 這份文件中,PEPs 還有許多不同的提議,包含之前的Bug fix release、Python語言演進的 Guidelines、但最需要被詳細閱讀跟使用的就是這個  PEP8 – Style Guide for Python Code 。

每個語言有自己的命名慣例,有份經過官方、社群所經過時間考驗跟整理的命名慣例是相當難能可貴的,也會讓所有 Python的程式工程師能更理解你的程式碼。

下面僅列出部分我個人覺得與之前慣用的C++較為不同的Python專屬的命名慣例

情況建議範例
模組、套件名稱全部小寫、短名詞,必要時才使用底線 ( _ )imp, sys
縮排每個級別為 4 個空格,不使用Tab
變數名稱全部小寫,使用底線 _ 分隔長變數my_var
函式名稱全部小寫,可使用底線 _ 增加可讀性my_func()
類別名稱每個單字的第一個字母大寫MyClass
比較不用寫 == 寫出比較的結果是 True / Falseif my_var :
if not my_var:
常數名稱全部大寫,單字間加底線PI, TAX_RATE

底線開頭或結尾的名稱

底線開頭或結尾的名稱在 Python 中有特殊的用途。

前單底線 _var模組的private變數或函式,import 使用 * 匯入時無法匯入以 _ 底線開頭的名稱。
前雙底線 __var類別或物件的private變數或函式,會被Python改名,所以類別或者物件外部無法直接用原本名稱存取。
前後雙底線 __var__保留給Python內部使用的,避免使用這種形式。
_免洗變數,用完就丟。
Posted in: Python Tagged: python

Python – None 值

9 2 月, 2022 by lenny0929 Leave a Comment
python basic

Python 除了字串、數字等標準型別外,有一個特殊的基本資料型別 : None。

None值主要是用來表示空值,與 C++ 的NULL、nullptr類似,而最常出現的地方其實就是在函式的回傳值,如果函式沒有回傳值,預設情況下Python還是會傳回一個 None。

[ 閱讀更多 …]
Posted in: Python Tagged: none, python

近期文章

  • AutoEncoder 自動編碼器來建構生成模型
  • AutoKeras 的模型搜尋行為
  • 如何檢視 TensorFlow 資料集中的資料 ?
  • AutoKeras 可接受的輸入資料格式
  • 神經網路模型的資料預處理

分類

  • AI (7)
  • Python (4)
  • SEO (1)
  • 創業 (13)
  • 學習 (15)
  • 技術 (63)
  • 產品 (12)
  • 閱讀筆記 (3)

Copyright © 2023 懶泥陳的技術手札.

Omega WordPress Theme by ThemeHall