21.Python技巧
1.推导式
之前我们列举过一些推导式,我们继续看看其他的写法。
将列表里的每个元素相乘:
[i*i for i in list]
条件语句插入推导式(如果i等于1,将元素置空,否则不做出操作):
['' if i == 1 else i for i in list]
2.指针应用
功能:如下的price_list列表数据 (按照等差规则填充)中间空缺的元素。
代码理解:i原始为None j原始为False 这两个指针他们的发生值的变化,来决定程序走向哪个分支。
细看:如果 price_list[key] == ''这条语句一直执行的话,将永远得不到 j = True
那也就是代表这个程序的开头处一定是不为空的一个元素
那我们来到第二个元素 '100' 它不为空,此时走else j变成True 此刻 i还是None
来到第三个元素 '200' 它不为空 此时走else j变成True 此刻 i还是None
来到第四个元素 '' 它为空 此时走if 满足了 i == None j == True 走 if ,此刻 i = 3-1 = 2
来到第五个元素 '500' 它不为空 此时走else 满足了 i != None 走 if , 此刻 添加了一个[2,4]的list 很显然此刻就将空缺和两边的元素拿到了
最后重新将 i置为None
def ErrorPrice_Process(price_list): # price_list = ['', '100', '200', '', '500','','600'] i = None j = False keyEr_list = [] for key in range(len(price_list)): if price_list[key] == '': if i == None and j == True: i = key -1 else: j = True if i != None: keyEr_list.append([i, key]) i = None price_list_re = copy.deepcopy(price_list) for keyEr in keyEr_list: star = keyEr[0] end = keyEr[1] num = end - star + 1 priceNu_list = list(numpy.linspace(float(price_list[star]), float(price_list[end]), num)) j = 1 for i in range(star+1, end): price_list_re[i] = str(round(priceNu_list[j])) j += 1 return price_list_re