python

1、python单例模式?

②. 使用decorator来实现单例模式

  1. def singleton(cls, *args, **kw):  
  2.     instances = {}  
  3.     def _singleton():  
  4.         if cls not in instances:  
  5.             instances[cls] = cls(*args, **kw)  
  6.         return instances[cls]  
  7.     return _singleton  
  8.  

2.lambda函数是一种单行的小函数,形式如下:labmda 参数:表达式 ,lambda函数默认返回表达式的值。

3.Python里面如何拷贝一个对象? 
一般来说可以使用copy.copy()方法或者copy.deepcopy()方法,几乎所有的对象都可以被拷贝

4 PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告

5.有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小?

1. 将两序列合并为一个序列,并排序,为序列Source 2. 拿出最大元素Big,次大的元素Small  3. 在余下的序列S[:-2]进行平分,得到序列max,min  4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。 

Python代码  :

def mean( sorted_list ):  
    if not sorted_list:  
        return (([],[]))  
   
    big = sorted_list[-1]  
    small = sorted_list[-2]  
    big_list, small_list = mean(sorted_list[:-2])  
   
    big_list.append(small)  
    small_list.append(big)  
   
    big_list_sum = sum(big_list)  
    small_list_sum = sum(small_list)  
   
    if big_list_sum > small_list_sum:  
        return ( (big_list, small_list))  
    else:  
        return (( small_list, big_list))  

java实现:

分别用i,j遍历a,b序列,若a[i]和b[j]交换,则:A' = sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i])
            = sum(a) - sum(b) - 2 (a[i] - b[j])
            = A - 2 (a[i] - b[j])
即就是:(a[i] - b[j])在(0,A)之间并且最接近A/2则序列a,b的差值最小

因此得到算法:
在a和b中寻找使得x在(0,A)之间并且最接近A/2的i和j,交换相应的i和j元素,重新计算A后,重复前面的步骤直至找不到(0,A)之间的x为止。

int balanceArray(int[] array1, int[] array2){
        if (array1.length != array2.length)
            return -1;
        if (sum(array1)< sum(array2))  //让array1的和大于array2.
        {
            int[] array = array1;
            array1 = array2;
            array2 = array;
        }
        boolean ifCycle = true;
        int length = array1.length;
        int sumValue = 0;
        while (ifCycle)
        {
            ifCycle = false;     
            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    int itemValue = array1[i] - array2[j];
                    sumValue = sum(array1) - sum(array2);
                    if (itemValue < sumValue && itemValue > 0)
                    {
                        ifCycle = true;
                        int item = array1[i];
                        array1[i] = array2[j];
                        array2[j] = item;
                    }
                }
            }
        }
        return sumValue;
    }

6.Python里面search()和match()的区别?  match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配

7.Python中pass语句的作用是什么?  pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作

8.说明os,sys模块不同?os:提供一种方便的使用操作系统函数的方法;sys:提供访问由解释器使用或维护的变量和在与解释器交互使用到的函数。

os 常用方法:os.remove()删除文件 ,os.rename()重命名文件 ,os.walk()生成目录树下的所有文件名  ,os.chdir()改变目录 ,os.getcwd()取得当前工作目录  
sys 常用方法:sys.maxint  最大的Int值 ,sys.stdout      标准输出  ,sys.stdin          标准输入  

os.path和sys.path的区别?os.path是module(模块),包含了各种处理长文件名(路径名)的函数;sys.path是由目录名构成的列表

9.解释生成器(generator)与函数的不同,并实现和使用简单generator?
生成器和函数的主要区别在于函数 return a value,生成器 yield a value。 yield 使函数转换成生成器,而生成器反过来又返回迭代器。

10.合并链表:a.extend(b)或 a+b

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值