def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) # 输出: [6, 6, 6, 6]
思路:
这题涉及到了闭包延时绑定,当循环执行完了之后才会执行传参,循环四次,每一次循环完 i=3 然后再和x相乘 所以结果是6,6,6,6。 如果把 [ lambda x: ix for i in range(4) ] 改成 ( lambda x: ix for i in range(4) )这样就变成了一个生成器 自动实现迭代器协议,一边循环一边计算的机制, 这样结果就是 0,2,4,6.
def get_index_list(nums, target): # Todo 作为一个方法来实现,批量解决这个获取索引的问题 """ :params nums:传的参数的列表 :params target: 目标值 :return: 返回索引 """ dic = {} for a, b in enumerate(nums): # a是下标 b是对应值 dic[b] = a # 对应值存入字典 for i, b in enumerate(nums): j = dic.get(target-b) # 从字典中拿出对应值 用目标值减去对应值 if j is not None: # 判断如果减去的对应值不为空,则返回下标 return [i, j]
def get_number(nums): """ :params nums:传的参数的数组 :return: 返回重复数字 """ nub = [] for i in nums: if nums.count(i) >= 2: if str(i) not in nub: nub.append(str(i)) print('或'.join(nub)) if __name__ == "__main__": get_number([2, 3, 1, 0, 2, 5, 3])