天天看點

習題練習(二)

習題練習(二)

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]
print(list(filter(lambda x:lis.index(x)%2!=0,lis)))      

View Code 

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):
    def inner(arg):
        for i in range(5):
            f(arg)
            arg += 1
    return inner
@warpper
def fun(num):
    print('我被執行了%s次了'%num)
fun(1)      

View Code

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

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)())  #1      

View 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

posted on 2019-03-20 22:25 獨角兕大王 閱讀(...) 評論(...) 編輯 收藏

繼續閱讀