博文配套視頻課程:Python面試題與面試技巧
列表解析器
列表解析式:它並不是用來解決全新的問題,只是爲解決已有問題提供了新的語法
列表解析式語法
number = [1, 2, 3, 4, 5]
double_odds = []
for n in number:
if n % 2 == 1:
double_odds.append(n * 2)
print(double_odds)
double_odds = [n * 2 for n in number if n % 2 == 1]
print(double_odds)
無條件子句的列表解析式
month = [str(i) + '月' for i in range(1,12)]
print(month)
字典解析表達式
d = {'j': 'java', 'p': 'python', 'o': 'oracle'}
d2 = {}
for key, value in d.items():
# 得知遍歷時不能修改字典元素
d2[value] = key
print(d2)
d = {value: key for key, value in d.items()}
print(d)
創建一個邊界全爲1,裏面全爲0的列表
import numpy as np
t1 = np.arange(12).reshape(3,4)
# [行,列] 選擇並修改某個點
t1[0,0] = 100
print(t1)
print(t1[:,(1,3)])
print(t1[(0,2),1:])
import numpy as np
t2 = np.zeros(shape=(10,10),dtype=np.int8)
t2[[0,9]] = 1
t2[:,[0,9]] = 1
print(t2)
pandas中如何給某一列貼標籤
import numpy as np
import pandas as pd
np.random.seed(4)
score_list = np.random.randint(25, 100, size=20)
print(score_list)
# [27 70 55 87 95 98 55 61 86 76 85 53 39 88 41 71 64 94 38 94]
df = pd.DataFrame(data=score_list,columns=['score'])
# 指定多個區間
bins = [0, 59, 70, 80, 100]
labels=['不及格','及格','良好','優秀']
score_cut = pd.cut(df['score'], bins,labels=labels)
print(type(score_cut)) # <class 'pandas.core.arrays.categorical.Categorical'>
print(score_cut)
df['type'] = score_cut
print(df)
DataFrame、Series、ndarray關係
# ndarray --> Series --> DataFrame
import numpy as np
import pandas as pd
t1 = np.arange(12).reshape(3,4)
# 沒有列名和索引,聚合函數對ndarray有效
print(t1.max(),t1.min(),t1.mean())
print('-'*100)
# Series必須是1維的
ss = pd.Series(data=[1,2,2,3], name="col_name")
print(ss,type(ss))
print(ss.index,ss.values,type(ss.values),ss.name)
print('-'*100)
# DataFrame是2維的
df = pd.DataFrame(data=t1,index=list('xyz'),columns=list('abcd'))
print(df,type(df))
print(df.index,df.values,df.columns)
# 對每一列進行聚合操作
print(df.max(),df.min(),df.mean())
# 僅僅針對Series操作,對每組進行統計,返回還是一個Series
print(ss.value_counts()) # df操作失敗
__new__與__init__方法的區別
- __new__是一個靜態方法,而__init__是一個實例方法.
- __new__方法會返回一個創建的實例,而__init__什麼都不返回.
- 只有在__new__返回一個cls的實例時後面的__init__才能被調用.
- 當創建一個新實例時調用__new__,初始化一個實例時用__init__
class Person(object):
# 是一個靜態方法,根據類型創建實例, 創建實例後會自動調用init方法
def __new__(cls, *args, **kwargs):
print(cls, args, kwargs)
return object.__new__(cls)
# 是一個實例方法,用來在創建完成對象後進行必要的初始化,該方法返回None
def __init__(self, name, age):
print('name:', name, 'age:', age)
self.name = name
self.age = age
# return ""
def show(self):
print(self.name, self.age)
p = Person("admin", age=23)
p.show()