赞
踩
一些一句话就可以解决的比较难的功能
p=a.index(value) # 查找列表a中,值等于value的元素的位置,仅仅是第一个位置 s = "%05d" % n # 数字转字符串,位数不够补0 a=list(range(1,n+1)) # 构造一个list,其中元素从1到n a=list(np.full(5,np.nan)) # 得到一个所有元素都是nan的长度为5的列表 bol=np.isnan(a) # 判断a是否为nan L=list(map(list, zip(*L))) # 转置,二维及以上 a=list(reversed(a)) # 列表反转 if len(list_a) == 0 # 判断一个list是否为空 if list_a # 不是空 p1 = np.polyfit(X, Y, 7) # 利用7次多项式拟合,返回拟多项式系数,按照阶数从高到低排列 Y1 = np.polyval(p1,X) # 根据拟合出的多项式系数和自变量X值得到拟合值 np.random.normal() # 产生一个高斯白噪声 x = np.random.randint(0, rows) # 生成指定范围内的随机整数 np.random.rand() # 返回一个服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。 np.random.rand(a,b) # 返回a行b列的array,其值取值范围为[0,1) b = b[b != 0] # 去掉数组中的 0 Gtmp=[[np.nan]*5 for i in range(33)] # 构造一个33*5的list,每个元素都是nan index_list=[i for i,x in enumerate(a) if x==3] # 得到一个列表中元素等于某个值的元素的所有索引 mylist = [0 if math.isnan(x) else x for x in mylist] # 用 0 替换数组中的 nan sorted(boxTypes, key=(lambda x:x[1]), reverse=True) # 将二维列表根据第二个元素的大小进行由大到小排序
对象赋值、浅深拷贝
项目 | 含义 | 图示 |
---|---|---|
b = a | 赋值引用,a 和 b 都指向同一个对象 | |
b = a.copy() | 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 | |
b = copy.deepcopy(a) | 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。 |
对于二维列表
取元素
a[1][1] #取出某一行某一列中的元素,返回一个数
a[1][1:3] #取出某一行某几列的元素,返回一个列表
b=[i[0] for i in a[1:3]] #取出某一列某几行的元素,返回一个列表
a[-1] #取列表最后一个元素
a[1:-1] #取从第二个元素到倒数第二个元素,注意,不含倒数第一元素
a[1:] #取从第二个元素到最后一个元素
改元素
a[0][1]=120
a[1][1:3]=[220,230]
Data=setVecIn2Dlist(vec,Data,a=[],b=0)
a = [0,1,2,3,4]
b = [0,2,6]
list(set(a) & set(b)) # 使用 "&" 运算求a与b的交集,输出:[0, 2]
list(set(a) | set(b)) # 使用 "|" 运算求a与b的并集,输出:[0, 1, 2, 3, 4, 6]
list(set(b) - set(a)) # 使用 "-" 运算求a与b的差(补)集: 求b中有而a中没有的元素,输出:[6]
list(set(a) - set(b)) # 使用 "-" 运算求a与b的差(补)集: 求a中有而b中没有的元素,输出:[1, 3, 4]
list(set(a) ^ set(b)) # 使用 "^" 运算求a与b的对称差集,输出:[1, 3, 4, 6]
值得注意的是,转成set集合运算后再转回来就会改变元素的顺序,所以可以通过c.sort(key=a.index)
来限制其顺序
array=numpy.array(list) # list -> numpy.array
list=array.tolist() # numpy.array -> list
dataframe_a = pd.DataFrame(list_a) # list -> pands.dataframe
list_b=list(dataframe_a[0]) # pands.dataframe -> list
# 将一个一维列表reshape成二维列表
temp1=np.array(temp).reshape(p,l).tolist()
对一个列表的数学运算——均值、方差、标准差、最值
mean_val=np.mean(a) # 求均值
mean_val=np.average(a,weight=[]) # 求加权平均值,weight的长度需与a保持一致
var_val=np.var(a) # 计算总体方差,分母是N
var_val=np.var(a, ddof = 1) # 计算方差,分母是N-1
var_val=np.var(b, axis = 0) # 计算矩阵每一列的方差
var_val=np.var(b, axis = 1) # 计算矩阵每一行的方差
std_val=np.std(a) # 计算总体标准差,用法和var一样
max_value = max(exp_list) # 求列表最大值
max_idx = exp_list.index(max_value) # 求最大值对应索引
min_value = min(exp_list) # 求列表最小值
min_idx = exp_list.index(min_value) # 求最小值对应索引
一个元素与一个列表的数学运算:
b=[i*times for i in a] # .*
b=[i/times for i in a] # ./
b=[i+times for i in a] # .+
b=[i-times for i in a] # .-
两个长度相等的列表对应元素的数学运算:
c = [a[i]+b[i] for i in range(0,len(a))] # +
c = [a[i]-b[i] for i in range(0,len(a))] # -
c = [a[i]*b[i] for i in range(0,len(a))] # *
c = [a[i]/b[i] for i in range(0,len(a))] # /
其实对更高维度的列表采取这种操作就有点费劲了,可以先将list转化为array进行运算后再用a.tolist()
转回来即可。下面以相乘为例:
c=np.array(a)*np.array(b)
d=c.tolist()
并且也支持一个数与一个array相乘。
示例 | 含义 |
---|---|
del listname[start : end] | 删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。什么也不返回 |
listname.pop(index) | 删除索引值为index的元素,如果不写 index 参数,默认会删除列表中的最后一个元素,类似于数据结构中的“出栈”。返回被删除的元素 |
listname.remove(value) | 删除列表中值为value的第一个元素,若列表中不存在值为value 的元素,则会引发 ValueError 错误 |
listname.clear() | 删除列表所有元素 |
下面的一些功能写到子博客中了:
groupby()
函数""" Util: judge whether all the data is nan """
def mIsAllnan(data):
n = len(data)
state = False
for i in range(n):
if not (math.isnan(data[i])):
break
if i == n - 1 and math.isnan(data[i]):
state = True
return state
""" get the rmse and the mean value of the data. > @param[in] data: the data list > @param[in] mode: mode=1: Eliminate noise return: < @param[out] mean_val: the mean value < @param[out] std_val: the std value """ def rmse(data=[], mode=0): mean_val = np.mean(data) error = [i - mean_val for i in data] std_val = np.std(error) while mode: a = 3 data1 = [] for i in range(len(error)): if error[i] < a * std_val: data1.append(data[i]) mean_val = np.mean(data1) error = [i - mean_val for i in data1] std_val = np.std(error) if len(data1) == len(data): break data = data1 return mean_val, std_val
def setVecIn2Dlist(vec,Data,a=[],b=0): """ set the specfic elements of specfic raw, cloum, page in 2D-list. > @param[in] vec: a list > @param[in] Data: The 2D-list > @param[in] a: The raw index list > @param[in] b: The column indx return: < @param[out] Data the 2D-list after change the elements """ nv=len(vec) nd=len(Data) if len(a)==0: a=list(range(0,nd)) na=len(a) if nv!=nv: print('Error::len(vec)!=len(a)') return Data j=0 for i in a: tmp=Data[i] tmp[b]=vec[j] j=j+1 return copy.deepcopy(Data)
取元素,首先做个小实验。
比如我现在有个二维列表,它里面存储的内容为:
a=[[11,12,13,14],
[21,22,23,24],
[31,32,33,34]]
我现在想得到第二行第二列的元素,按照正常的思路,应该是a[1][1]
,没错,a[1][1]
确实得到了我想要的元素22
。
我现在想得到第二行第二列和第三列的元素,按照正常的思路,应该是a[1][1:3]
,没错,得到的结果为[22, 23]
是我想要的
但是我现在想得到第1列,第二行和第三行的元素,尝试一下a[1:3][0]
,得到结果为[21, 22, 23, 24]
,之前的时候我觉得得到的结果很奇怪,现在看来很正常,首先a[1:3]
得到的同样是一个二维列表(是原来二维列表第二行和第三行),然后[0]
得到的是前一步得到的二维列表的第一行。如果想实现得到第一列,第二行和第三行的元素如何做?b=[i[0] for i in a[1:3]]
,这样得到就是目标[21, 31]
了。
如果现在我想改一下某个元素,比如
我想改第一行第二列的元素12
为120
,使用a[0][1]=120
即可轻松实现
我想改第二行,第二列和第三列的元素22 23
为220 230
,使用a[1][1:3]=[220,230]
即可
我想改第一列,第一行和第二行的元素[11 21]
为110 210
,该如何去做?
可以先将二维列表转置一下,现在改列元素问题就变成了改行元素问题,使用上面的方法即可实现。
aT=list(map(list, zip(*a)))
aT[0][0:2]=[110,210]
a=list(map(list, zip(*aT)))
但是平常可能会对转置这堆操作不熟悉,所以编写了一个小函数,如上面实用小函数所示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。