習題練習(二)
1、現有列表alist = [3,1,-4,2,-6] 按照元素的絕對值大小進行排序
alist = [3,1,-4,2,-6] ret=sorted(alist,key=lambda x:abs(x)) print(ret)View Code
2、5.輸入某年某月某日,判斷是這一年中的第幾天?(用內置模塊實現)
import time input_ = input(‘請輸入年月日:‘) time_local = time.strptime(input_,‘%Y-%m-%d %X‘) print(time_local.tm_yday) # 結構化時間調用裏面的參數View Code
3、一行代碼實現[1,4,9,16,25,36,49,64,81,100]
print(list(map(lambda x: x**2,range(1,11))))View Code
4、從0-99這個100個數中隨機取出10個不重復的數
import random print(list(random.sample(list(range(0,100)),10)))View Code
5、一行代碼,通過filter和lambda函數輸出以下列表索引為基數對應的元素
lis = [12,13,14,151,5,16,17,117,133,144,177]View Codeprint(list(filter(lambda x:lis.index(x)%2!=0,lis)))
6、將下列數據轉成想要的結果,盡量用簡潔的方式實現:
原數據lst =[[1,2,3],[4,5,6],[7,8,9]]
轉換後 li = [1,2,3,4,5,6,7,8,9]
lst =[[1,2,3],[4,5,6],[7,8,9]] li = [x for i in lst for x in i] print(li)View Code
7、實現一個裝飾器,通過調用一次裝飾器使被裝飾的函數調用5次
def warpper(f):View Codedef inner(arg): for i in range(5): f(arg) arg += 1 return inner @warpper def fun(num): print(‘我被執行了%s次了‘%num) fun(1)
8、將列表內的元素,根據位數被合並成字典(升級題)lst = [1,2,3,4,12,13,14,123,124,125,1234,1235,1236,1237,12345,12346,12347]
變成
{
1:[1,2,3,4],
2:[12,13,14],
3:[123,124,125],
4:[1234,1235,1236,1237],
5:[12345,12346,12347]
}
from collections import defaultdict d = defaultdict(list) # 這裏裏面的參數可以是任何可變數據類型,可以不斷往裏面加值 for i in lst: d[len(str(i))].append(i) # 不斷地給相應的加值 d = dict(d) # 會根據最終值工廠化這個字典 print(d)View Code
9、12.輸入一個不是空的字符串,判斷這個字符串是不是由一個子字符重復多次組成,字符只包含小寫字母,且長度不超過1000(升級題)
示例一:
輸入:"abab"
這種就輸出True,因為輸入的是ab重復組成的字符串
示例二:
輸入:"abcabcabc"
這種就輸出True,因為輸入的是abc重復組成的字符串
示例三:
輸入:"abcdabcd"
這種就輸出True,因為輸入的是abcd重復組成的字符串
示例四:
輸入:‘abc"
這種就輸出False,因為輸入的沒有重復組成字符串
法一 : def func(): cont = input(‘請輸入字符串:‘).strip() for i in range(1,len(cont)-1): for j in range(i,len(cont),i): if cont[0:0+i]==cont[j:j+i]:continue # 叠代比較 elif cont.replace(cont[0],‘‘) ==‘‘:continue # 排除單個字母重復奇數次 else:break else:return True else:return False print(func()) 法一: s = input("請輸入一個只包含小寫字母組成的字符串:").strip() l=len(s) for i in range(l//2): j=l//(i+1) if s[0:i+1]*j==s: print(True) break else: print(False)View Code
num = input(‘請輸入一個字符:‘) j = 1 while 1: print(num[:j]) if (num[:j])*(num.count(num[:j])) == num and (num[:j] != num): print(True) break elif num[:j] == num: print(False) break else: j += 1代碼補充
10、 求結果 v = [lambda :x for x in range(10)]
print(v) #[<function <listcomp>.<lambda> at 0x02EE2F60>, …… print(v[0]) #<function <listcomp>.<lambda> at 0x02EE2F60> print(v[5]()) #9 全是9,應為最後一個x為9,所有的函數執行時都引用一個9的內存View Code
11、求結果v = (lambda :x for x in range(10))
print(v) #一個生成器地址 <generator object <genexpr> at 0x0382E870> print(v[0]) # 註意生成器沒有索引 TypeError: ‘generator‘ object is not subscriptable print(v[0]()) # 生成器只能send或則next調用 TypeError: ‘generator‘ object is not subscriptable print(next(v)) #一內存地址 <function <genexpr>.<lambda> at 0x03182F60> print(next(v)()) #1View Code
12、有兩個字符串列表,a和b,每個字符是由逗號分隔的一些字符,(升級題)盡量做得支持擴展
a = [
‘a,1‘,
‘b,3,22‘,
‘c,3,4‘,
‘f,5‘,
]
b=[
‘a,2,1‘,
‘b,4‘,
‘d,2‘,
‘e,12‘,
‘g,12,43‘,
‘a,4354,6‘
]
按每個字符串的第一個值,合並a和b到c
c = [
‘a,1,2‘,
‘b,3,22,4‘,
‘c,3,4‘,
‘d,2‘,
‘e,12‘,
‘f,5‘
]
法1: c=[] for i in a: flag = False removes = None i = i.strip() li=[i[0],i[2:],] for v in b: v=v.strip() if i[0]==v[0]: li.append(v[2:]) flag,removes=True,v break print(li) c.append(‘,‘.join(li)) if flag: b.remove(removes) else: c.extend(b) print(c) 法2: g = { i[0]:i for i in a} for i in b: if i[0] in g: g[i[0]]=g[i[0]][2:]+i[1:] else: g[i[0]]=i print(list(g.values()))View Code
習題練習(二)