Data Types Basic
type(variable)
獲取此變數資料型態dir(data_type)
獲取可操作此data type的方法;help(data_type)
獲取詳細的方法內容help(data_type.method)
獲取指定方法的詳細內容。
Variable Name
- 變數命名要清楚有意義
- 變數若為多個單字用
_
連接,例如my_message
Textual Data
單雙引號''
、""
- 皆可包住字串
兩者意義相同,擇一並且維持就好。但是因為可能有字串內需要用到單雙引號的情形,有兩種解決辦法:
Ex : 印出 Amanda's cats
使用跳脫字元
\
print('Amanda\'s cats')
外面用另一符號
print("Amanda's cats")
多行可用
""" """
並且輸出會遵照數入格式
print(
"""
Cama is the best
dog of the world!
""")
Modules
長度 :
len()
message = 'Hello World'
print(len(message))擷取字元 :
[]
message = 'Hello World'
print(message[6:])
# Output World小寫 :
.lower()
大寫 :
.upper()
數內含字元個數
.count('')
message = 'Hello World'
print(message.count('Hello'))
# Output 1
print(message.count('l'))
# Output 3找字元index
不存在的字元輸出是-1
message = 'Hello World'
print(message.find('World'))
# Output 6
print(message.find('dog'))
# Output -1替代成別的字元 :
.replace('original', 'new')
message = 'Hello World'
message.replace('World', 'Dog')
print(message)
# Output Hello World
message = message.replace('World', 'Dog')
print(message)
# Output Hello Dog字串相加
greeting = 'Hi'
name = 'John'with
+
但是如果遇到較長的組合會很不方便,所以較不建議。
message = greeting + ', ' + name
Format String : placeholder
{}
+.format(var_1, var_2, ...)
message = '{}, {}. Welcome!'.format(greeting, name)
f string :
f'{var_1}, {var_2}.
是python3.6以上新增的,其一好處是在placeholder直接對變數操作時可讀性高,例如
name.upper()
message = f'{greeting}, {name}. Welcome!'
Integer & Float
基本運算
Division :
/
print(3/2)
# 1.5在Python3以前會是1。
Floor Division:
//
print(3//2)
# 1Exponent
print(3 ** 2)
# 9Modulus
能用來確認是 奇數還是偶數
print(5 % 2)
# 1
Modules
絕對值
abs()
近似值
round()
- first arg : number
- second : 要取到的位數
print(round(3.65), 1)
# 3.7
Comparisons
- Equal
==
- Not Equal
!=
- Greater Than
>
- Less Than
<
- Greater or Equal
>=
- Less or Equal
<=
String or Number?
因為在python當中,字串和數值都可以使用+
的運算,所以如果不小心就會出現預期外結果。
若是要做數值運算,最好加上int()
、float()
等確定將變數轉換為你要的資料型態。
num_1 = '10'
num_2 = '20'
print(num_1 + num_2)
# 1020
num_1 = int(num_1)
num_2 = int(num_2)
print(num_1 + num_2)
# 30
Booleans
is
比較內容的相異性用的是==
;而is
是用來比較記憶體位置是否相同。
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)
# True
print(a is b)
# False
# Print the memory location
print(id(a))
print(id(b))
# 1679406415360
# 1679409529472
a = [1, 2, 3]
b = a
print(a is b)
# True
False Value
- False
- None
- Zero of any numeric type.
- Any empty sequence. (e.g.
''
、()
、[]
) - Any empty mapping. (e.g.
{}
)
List, Tuple, and Sets
List和Tuple適用於處理一序列的資料,Tuple不能更改。
Sets是沒有順序性的,且元素不能重複。因為Sets不在意順序,所以可能會每次印出來順序不同。此外,會自動排除重複的元素。
宣告方式
list1 = []
list1 = list()
tuple1 = ()
tuple1 = tuple()
set1 = set()
Not Correct : set1={}
List
取得元素
- list_1[index]
- list_1[idx1:idx2]
- list_1[idx1:]
- list_1[:idx]
增加元素
- 加在最尾端:
list_1.append(number)
- 加在指定位置:
list_1.insert(index, number)
- 附加在另一list後面:
list_1.extends(list_2)
減少元素
- 移除指定元素:
list_1.remove(number)
- 移除最尾端的元素,並且會回傳pop的元素:
list_1.pop()
操作元素
- 倒轉元素:
list_1.reverse()
- 排序元素:
list_1.sort()
,args:reverse=False
,會改變原始list - 排序元素,回傳一list:
sorted(list_1)
,因此不會改變原始list
number list
min(list_1)
max(list_1)
sum(list_1)
Others
list_1.index(number)
取得number的index,若number不存在,會有ValueError
number in list_1
: 確認number是否存在list_1中,回傳Boolean
loop
取得list_1內容
for item in list_1:
print(item)
取得list_1內容和index, args = start
,設定index要起始數
for idx,item in enumerate(list_1,start=0):
print(idx,item)
join & split
list = [A,B,C]
list_str = ' _ '.join(list)
# A _ B _ C
new_list = list_str.split(' _ ')
# [A,B,C]
Sets
- 確認某元素item是否存在set_1中:
item in set_1
- 兩set的共同、相異元素 、聯集
set_1.intersection(set_2)
set_1.difference(set_2)
set_1.union(set_2)
namedtuple
有點類似結合dictionary的tuple,享有tuple不可更動及dictionary可以有標籤的好處。來看一個範例:
color = (255, 155, 55)
用tuple定義三原色組成橘色!但這樣的可讀性很低,別人可能會不知道255代表是紅色等等。所以我們改用dictionary試試。
color = {'red': 255, 'green': 155, 'blue': 55}
這樣就好看多了,但是!如果要定義很多顏色,就要重複很多次這些較長的敘述,而且dictionary是可以被修改的,如果不小心被改,顏色就跑掉了!所以我們要來用namedtuple。
from collections import namedtuple
Color = namedtuple('Color', ['red', 'green', 'blue'])
orange = Color(255, 155, 55)
print(orange)
# Color(red=255, green=155, blue=55)
print(orange.red)
# 255
Dictionary
Basic
setting
student = {'name': 'John', 'age': 25, 'courses': ['Math', 'CompSci']}
get data
print(student)
# {'name': 'John', 'age': 25, 'courses': ['Math', 'CompSci']}
print(student['name'])
# Johnset data
student['name'] = 'Wendy'
print(student['name'])
# Wendy
student['phone'] = '1234-5678'
print(student['phone'])
# 1234-5678
Modules
student = {'name': 'John', 'age': 25, 'courses': ['Math', 'CompSci']}
取得某key對應的value :
dict.get()
因為直接用
dict['key']
的方式若該key不存在,會出現KeyError,所以應用dict.get()
print(student.get('phone'))
# None
print(student.get('phone'), 'Not Found')
# Not Found更新 :
dict.update()
student.update({'name': 'Wendy', 'age': 22, 'phone': '123-4567'})
刪除 :
del dict['key']
ordict.pop('key')
,pop會回傳值。# delete 'age' in dict
del student['age']
print(student)
# {'name': 'Wendy', 'phone': '123-4567'}
# pop 'name' in dict
name = student.pop('name')
print(student)
# {'phone': '123-4567'}
print(name)
# Wendy長度
len(dict)
print(len(student))
# 3取得keys :
dict.keys()
or loopprint(student.keys())
# dict_keys(['name', 'age', 'courses'])for key in student:
print(key)
# name
# age
# courses取得values :
dict.values()
print(student.values())
# dict_values(['John', 25, ['Math', 'CompSci']])同時取得keys和values
dict_values(['John', 25, ['Math', 'CompSci']])
# dict_items([('name', 'John'), ('age', 25), ('courses', ['Math', 'CompSci'])])for key, value in student.items():
print(key, value)
# name John
# age 25
# courses ['Math', 'CompSci']
Loops
break&continue
break
: 離開迴圈。
continue
: 直接進入下一迴圈。
nums = [1, 2, 3]
for num in nums:
if num == 2:
print("Found!")
break
print(num)
# 1
# found!
for num in nums:
if num == 2:
print("Found!")
continue
print(num)
# 1
# Found!
# 3