# list1 = [1,2,3,4,5,6]
# list2 = []
# for i in list1:
# list2.append(i+1)
# print(list2)
上面是正常操作
# list3 = [i+1 for i in list1]
# print(list3)
上面是简单的列表推导式
list1 = [
{"num":1,"name":"cheng","sex":"男","score":[100,79,88]},
{"num":2,"name":"wang","sex":"男","score":[80,94,92]},
{"num":3,"name":"wu","sex":"女","score":[60,83,77]}
]
需求:将数据的name取出来
常规:
# list2 = []
# for dic in list1:
list2.append(dic["name"])
print(list2)
列表推导式:
list3 = [dic["name"] for dic in list1]
需求:将数据中性别为男的数据拿出来,分数减一放到list2中
常规:
# list2 = []
# for dic in list1:
# if dic["sex"] == "男":
# for score in dic["score"]:
# list2.append(score-1)
# print(list2)
列表推导式:
list3 = [ score-1 for dic in list1 for score in dic["score"] if dic["sex"] == "男"]
print(list3)
下面演示怎么拆解列表推导式。
list4 = []
for dic in list1:
if dic["sex"] == "男":
for score in dic["score"]:
list4.append(score-1)
print(list4)
# list3 = [ dic["name"] for dic in list1 if dic["sex"]=="女"]
# print(list3)
加上楼层的房价预测
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
all_data = pd.read_csv("上海二手房价.csv")
prices = all_data["房价(元/平米)"].values.reshape(-1,1)
pri_scaler = MinMaxScaler()
pri_scaler.fit(prices)
st_prices = pri_scaler.transform(prices)
这里的归一化,不是自己写的了,用的别人包装好的
# floors = all_data["楼层"].values.reshape(prices.shape[0],prices.shape[1])第一种写法
floors = all_data["楼层"].values.reshape(*prices.shape) # 解包操作。第二种写法。
list= [1,2,3]
***
list= [1,2,3]
print(list[0],list[1],list[2])
123
print(*list)
123
把后面变量的所有参数拿出来给前面的函数执行。
***
flo_scaler = MinMaxScaler()
flo_scaler.fit(floors)
st_floors = flo_scaler.transform(floors)
years = all_data["建成年份"].values.reshape(-1,1)
yer_scaler = MinMaxScaler()
yer_scaler.fit(years)
st_years = yer_scaler.transform(years)
# y = k*floor + k*year + b
# y = k1 * floor + k2 * year + b
k1 = 0
k2 = 0
b = 0
lr = 0.01
epoch = 100
for e in range(epoch):
pre = k1 * st_floors + k2 * st_years + b
loss = np.mean((pre - st_prices) ** 2)
delta_k1 = np.mean((pre - st_prices) * st_floors)
delta_k2 = np.mean((pre - st_prices) * st_years)
delta_b = np.mean(pre - st_prices)
k1 -= lr * delta_k1
k2 -= lr * delta_k2
b = b - lr * delta_b
print(loss)
while True:
year = int(input("预测的年份:"))
year = yer_scaler.transform([[year]])# 这里分别对楼层和年份进行归一化,也是为了这里的操作
floor = int(input("预测的楼层:"))
floor = flo_scaler.transform([[floor]])这里面要输入一个二级list
pre = k1 * floor + k2 * year + b
print(f"预测的房价为:{pri_scaler.inverse_transform(pre).tolist()[0][0]:.2f}")这里要进行反归一化。