Python常見問題系列


Python基礎題
1、冒泡排序
def mao_pao(li):
    for i in range(len(li)):
        for j in range(len(li)):
            if li[i] < li[j]:
                li[i],li[j] = li[j] ,li[i]
import random
li = list(range(10))
random.shuffle(li)
print(li)
mao_pao(li)
print(li) 
2、刪除列表中的重復元素
方式一
li = [1,5,5,4,12,3,1,5]
print(list(set(l)))

方式二
li = [1,5,5,4,12,3,1,5]
def func(li):
    l = []
    for i in li:
        if i not in l:
            l.append(i)
    return l
print(func(li)) 
3、二分查找
方式一:遞歸版
li = [1,2,3,4,5,6,7,8,9,10]
def erfen(li,aim ,start=0 ,end=len(li)-1):
    if start <= end:
        mid = (start+end)//2
        if li[mid] >aim :  #如果中間的值比目標值大,就從左邊找
            return erfen(li,aim,start,mid-1)
        elif li[mid]<aim : #從右邊找
            return erfen(li,aim,mid+1,end)
        else:
            return mid
ret = erfen(li,10)
print(ret)

方式二:循環版
li = [1,2,3,4,5,6,7,8,9,10]
def erfen(li,aim,start=0,end=len(li)-1):
    while start <= end:
        mid = (start+end) //2
        if li[mid] < aim:
            start = li[mid] +1
        elif li[mid] >aim:
            end = li[mid] -1
        else:
            return mid

print(erfen(li,10)) 
4、寫出下面代碼的輸出結果
def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print(l)
f(2)  #[0,1]
f(3,[3,2,1]) #[3,2,1,0 1 4]
f(3) #[0,1,0,1,4]

5、實現字符串反轉 輸入str="string"輸出'gnirts'
# 方式一
def str_reverse(str):
    return str[::-1]  #從前到后步長為-1
print(str_reverse('string'))

# 方式二
def str_reverse2(str):
    l = list(str)
    l.reverse()
    new_str = ''.join(l)
    return new_str
print(str_reverse2('string')) 
6、一行代碼實現對列表a中的偶數位置的元素進行加3后求和
# 0 1 2 3 4
# 0   5   7
sums=sum(map(lambda x:x+3,list(range(5))[::2]))
print(sums) 
7、List=[-2,1,3,-6] ,如何實現以絕對值大小從小到大將list中內容排序
List=[-2,1,3,-6]
List.sort(key=abs)  #按照絕對值從小到大排序
print(List) 
8、如果當前日期為20170130,要求寫一個函數輸出N天后的日期
import datetime
data = '20170130'
def func(n,data):

    date=datetime.datetime.strptime(data,'%Y%m%d')
    da=datetime.timedelta(n)
    return date+da

print(func(2,data)) 
9、實現一段代碼,功能是將這段代碼打印出來
import os
def print_code():
    with open(os.path.join(os.getcwd(),__file__),'r',encoding='utf-8') as f:
        return f.read()
print(print_code()) 
10、合並兩個列表,並去重,組成一個新的列表
# 方式一
list1 = [1,2,3,5,8,4,2,6]
list2 = [11,44,21,2,54,77]
print(list(set(list1+list2)))

#方式二
list1.extend(list2)
print(list(set(list1)))
#方式三
def list_union(list1,list2):
    for i in list2:
        list1.append(i)
    return list1
print(list(set(list_union(list1,list2)))) 
11、什么是lambda表達式?他有什么好處?另外Python在函數編程方面提供了些什么函數和語法?
答:lambda 表達式也就是匿名函數,一些簡單的功能需要實現的時候可以用匿名函數,一行語句體搞定。
    它語法簡單,簡化代碼,不會產生命名沖突,污染命名空間。
    Python提供了map,filter,reduce等函數方法,提供了裝飾器,閉包等語法 
12、詳細說說tuple,list,dict的用法以及他們的特點
tuple:元組,不可變數據類型,訪問效率高,適合存儲一些常量數據,可以作為字典的鍵使用
list:列表,是可變數據類型,可以通過下標索引取值
dict:字典,是可變數據類型,存儲方式為鍵值對的形式,可以通過相對應的鍵獲取相對應的值。key支持多種數據類型

13、list 對象 alist [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}],按 alist 中元素的age 由大到小排序
alist = [{'name': 'a', 'age': 20}, {'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}]
alist.sort(key=lambda x:x['age'],reverse=True)
print(alist) 
14、將字符串:"k:1|k1:2|k2:3|k3:4",處理成 python 字典:{'k':'1', 'k1':'2', 'k2':'3','k3':'4' }
s = "k:1|k1:2|k2:3|k3:4"
str_list = s.split('|')
print(str_list)
d = {}
for i in str_list:
    key ,value = i.split(':')
    d[key] = value
print(d) 
15、斐波那契數列
def fib(n):
    if n<=2:
        return 1
    else:
        return fib(n-1) + fib(n-2)
print(fib(10))
 
        

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM