python一面基礎面試題小小總結(持續更新)

  • duoniu cm

1. 寫一個冒泡排序

def Bubblesort(list):
    for i in range(0, len(list)-1):
        for j in range(0, len(list)-1-i):
            list[j] > list[j+1]
            list[j],list[j+1] = list[j+1], list[j]
    return list

2. 寫一個快速排序

def Quicksort(myList,start,end):
    if start < end:
        i,j = start,end
        base = myList[i]
        while i<j:
            while (i<j) and (myList[j] >= base):
                j -= 1
            myList[i] = myList[j]
            while (i<j) and (myList[i] <= base):
                i += 1
            myList[j] = myList[i]
        myList[i] = base
        Quicksort(myList,start,i-1)
        Quicksort(myList,j+1,end)
    return myList

3. 二分法查找(遞歸,非遞歸)

# 遞歸
def bs1(nums, target):
    if not nums:
        return False
    middle = len(nums)//2
    if nums[middle] > target:
        return bs1(nums[:middle], target)
    elif nums[middle] < target:
        return bs1(nums[middle + 1:], target)
    else:
        return middle

# 非遞歸
def bs2(nums, target):
    start = 0
    end = len(nums)-1
    while start <= end:
        middle = (start+end)//2
        if nums[middle] > target:
            end = middle - 1
        elif nums[middle] < target:
            start = middle + 1
        else:
            return middle
    return False

4. 鏈表反轉

def reverse(self,head):
    if head is None:
        return None
    p = head
    cur = None
    pre = None
    while p is not None:
        cur = p.next
        p.next = pre
        pre = p
        p = cur
    return pre

  • yunfu kj

5. 給定一個數組 a=[1,1,2,3,3,5]和一個整數n=1,找出出現大於這個整數次數的數組[1,3]

hint: 主要考察列表推導式

a = [1,1,2,3,3,5]
n = 1
b = [x for x in a if a.count(x) > n]
c = list(set(b))
print(c)

6. "get_user"轉換爲小駝峯字符串"getUser", 將"get_used_my_id"轉換爲"getUsedMyId"

hint:先把'_'去掉並把str轉爲list;將第一個單詞保持小寫;其餘單詞首字母大寫;list轉爲str

def convert(one_string, space_character):
    string_list = str(one_string).split(space_character)
    first = string_list[0].lower()
    others = string_list[1:]
    others_capital = [word.capitalize() for word in others]
    others_capital[0:0] =[first]
    final = ''.join(others_capital)
    return final
print(convert('get_user','_')) # getUser
print(convert('get_used_my_id','_')) # getUsedMyId

7. n=4,打印出高度爲4的三角形(用*表示)

# 打印正三角
for i in range(5):
    for j in range(0,5-i):
        print(end=' ')  
    for k in range(5-i,5):
        print('*',end=' ')
    print('')
    * 
   * * 
  * * * 

 * * * * 

  • shuwang kj

8. 字符串'1.2.3.4.5'轉換爲'5|4|3|2|1'

hint: split()用法和join()用法

a = '1.2.3.4.5'
b = a.split('.')
b = b[::-1]
c = '|'.join(b)
print(c)

9. python3.x和python2.x中,import包搜索路徑順序

hint: 沒什麼區別,但在python3.3以後引入了命名空間包

其特性如下:

1.優先級最低,在已有版本所有的import規則之後;

2.要導入的文件夾中不能有__init__.py文件

3.主要依賴於sys.path中從左到右的搜索順序

當你導入一個模塊,Python 解析器對模塊位置的搜索順序是:
1、當前目錄
2、如果不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。
3、如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般爲/usr/local/lib/python/。
模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
10. python中用正則表達式匹配時間信息
import re
t = '19:10:48'
m = re.match(r'(.*):(.*):(.*)', t)
print(m.groups()) # ('19', '10', '48')

t = '23:59:08'
p = re.compile(r'^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])$')
s = p.search(t)
print(s.groups()) # ('23', '59', '08')
11. range和xrange區別,用python仿寫一個xrange函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章