>> initialize_2d_list( 2 , 2 ) [[None, None], [None, None]] > >> initialize_2d_list( 2 , 2 , 0 ) [[0, 0], [0, 0]] 2.函數(shù)切割數(shù)組 **解讀:**使用一個函數(shù)應用到一個數(shù)組的每個元素上," />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

30秒就能學會的代碼片段

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-31 15:22 ? 次閱讀

今天給大家?guī)硪恍?0秒就能學會的代碼片段,這些代碼潛力無限,蘊含了豐富的python編程思維,應用領(lǐng)域非常廣泛,而且學起來非常簡單。

1."二維列表"

**解讀:**根據(jù)給定的長和寬,以及初始值,返回一個二維列表。

def initialize_2d_list(w, h, val=None):
    return [[val for x in range(w)] for y in range(h)]

例:

> >> initialize_2d_list(2,2)
[[None, None], [None, None]]

> >> initialize_2d_list(2,2,0)
[[0, 0], [0, 0]]

2.函數(shù)切割數(shù)組

**解讀:**使用一個函數(shù)應用到一個數(shù)組的每個元素上,使得這個數(shù)組被切割成兩個部分。如果說,函數(shù)應用到元素上返回的值為True,則該元素被切割到第一部分,否則分為第二部分。

def bifurcate_by(lst, fn):
    return [
      [x for x in lst if fn(x)],
      [x for x in lst if not fn(x)]
    ]

例:

> >> bifurcate_by(['beep', 'boop', 'foo', 'bar'], lambda x: x[0] == 'b')
[['beep', 'boop', 'bar'], ['foo']]

3."交集點"

解讀: 兩個數(shù)組在被一個函數(shù)應用后,從第一個數(shù)組中提取出共有的元素的原元素組成一個新的數(shù)組。

def intersection_by(a, b, fn):
    _b = set(map(fn, b))
    return [item for item in a if fn(item) in _b]

例:

>> > from math import floor
 >> > intersection_by([2.1, 1.2], [2.3, 3.4],floor)
[2.1]

4.最大值下標

**解讀:**返回數(shù)組中最大值的下標。

def max_element_index(arr):
    return arr.index(max(arr))

例:

>> > max_element_index([5, 8, 9, 7, 10, 3, 0])
4

5.數(shù)組對稱差

**解讀:**找出兩個數(shù)組中不同的元素,并合成為一個新的數(shù)組。

def symmetric_difference(a, b):
    _a, _b = set(a), set(b)
    return [item for item in a if item not in _b] + [item for item in b if item not in _a]

例:

> >> symmetric_difference([1, 2, 3], [1, 2, 4])
[3, 4]

6."夾數(shù)"

解讀: 如果 num 落在一段數(shù)字范圍內(nèi),則返回num,否則返回離這個范圍最近的邊界:

def clamp_number(num,a,b):
    return max(min(num, max(a,b)),min(a,b))

例:

>> clamp_number(2,3,10)
3

 >> clamp_number(7,3,10)
7

 >> clamp_number(124,3,10)
10

7.鍵值映射

解讀: 使用對象的鍵重新創(chuàng)建對象,并運行函數(shù)為每個對象的鍵創(chuàng)建值。
使用dict.keys()遍歷對象的鍵, 通過函數(shù)生成一個新的值。

def map_values(obj, fn):
    ret = {}
    for key in obj.keys():
        ret[key] = fn(obj[key])
    return ret

**
例:**

>> > users = {
...   'fred': { 'user': 'fred', 'age': 40 },
...   'pebbles': { 'user': 'pebbles', 'age': 1 }
... }

 >> > map_values(users, lambda u : u['age'])
{'fred': 40, 'pebbles': 1}

 >> > map_values(users, lambda u : u['age']+1)
{'fred': 41, 'pebbles': 2}

8.大小寫轉(zhuǎn)換

解讀: 將英文單詞的首字母大寫改為小寫。
upper_rest參數(shù):設定是否將除首字母外的其他字母大小寫轉(zhuǎn)換。

def decapitalize(s, upper_rest=False):
    return s[:1].lower() + (s[1:].upper() if upper_rest else s[1:])

例:

>> > decapitalize('FooBar')
'fooBar'

 >> > decapitalize('FooBar', True)
'fOOBAR'

9.同鍵求和

解讀: 對列表中的各個字典里相同鍵值的對象求和。

def sum_by(lst, fn):
    return sum(map(fn,lst))

例:

>> > sum_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }], lambda v : v['n'])
14

10.一行代碼求出現(xiàn)次數(shù)

解讀: 求出列表中某個數(shù)出現(xiàn)的次數(shù)和。

def count_occurrences(lst, val):
    return len([x for x in lst if x == val and type(x) == type(val)])

例:

>> > count_occurrences([1, 1, 2, 1, 2, 3], 1)
3

11.數(shù)組再分組

對一個列表根據(jù)所需要的大小進行細分:

圖片

效果如下:

chunk([1,2,3,4,5],2)
# [[1,2],[3,4],5]

return中,map的第二個參數(shù)是一個列表,map會將列表中的每一個元素用于調(diào)用第一個參數(shù)的 function 函數(shù),返回包含每次 function 函數(shù)返回值的新列表。

12.數(shù)字轉(zhuǎn)數(shù)組

同樣是一則關(guān)于map的應用,將整形數(shù)字拆分到數(shù)組中:

def digitize(n):
    return list(map(int, str(n)))

效果如下:

digitize(123)
# [1, 2, 3]

它將整形數(shù)字n轉(zhuǎn)化為字符串后,還自動對該字符串進行了序列化分割,最后將元素應用到map的第一個參數(shù)中,轉(zhuǎn)化為整形后返回。

13.非遞歸斐波那契

還記得菲波那切數(shù)列嗎,前兩個數(shù)的和為第三個數(shù)的值,如0、1、1、2、3、5、8、13....

如果使用遞歸來實現(xiàn)這個算法,效率非常低下,我們使用非遞歸的方式實現(xiàn):

圖片

效果如下:

fibonacci(7)
# [0, 1, 1, 2, 3, 5, 8, 13]

這樣看是很簡單,但是思維要繞的過來哦。

14.下劃線化字符串

批量統(tǒng)一變量名稱或者字符串格式。

圖片

效果如下:

snake('camelCase')# 'camel_case'

snake('some text')# 'some_text'

snake('some-mixed_string With spaces_underscores-and-hyphens')# 'some_mixed_string_with_spaces_underscores_and_hyphens'

snake('AllThe-small Things')# "all_the_small_things"

re.sub用于替換字符串中的匹配項。這里其實是一個“套娃”用法,一開始可能不太好理解,需要慢慢理解。

第一個替換 ,是將s字符串中,使用' '替換'-'。

第二個替換 ,是針對第一個替換后的字符串,對符合'([A-Z]+)'正則表達式的字符區(qū)段(全大寫的單詞)用r' 1'替換,也就是用空格區(qū)分開每一個單詞。

第三個替換 ,是對第二個替換后的字符串,對符合'([A-Z][a-z]+)'正則表達式的字符區(qū)段(也就是首字母大寫,其他字母小寫的詞語)用r' 1'替換,也是將單詞用空格分隔開。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3566

    瀏覽量

    93540
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4723

    瀏覽量

    68240
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4768

    瀏覽量

    84378
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    412

    瀏覽量

    25881
收藏 人收藏

    評論

    相關(guān)推薦

    30個單片機編程例子詳解,學會了其他的也能更快掌握

    `單片機編程知識都是從無到有,剛學會了一些理論知識,需要編程例子來驗證所學及擴展所學,這就是很好的30個編程例子,學會就能對其他更加困難的一知半解,再加強學習一下就變大神啦。`
    發(fā)表于 09-05 01:26

    目瞪口呆??!手機充電只需30

    甚至不到一分鐘的時間就能將將手機電源從0%充滿至100%??!于是我想到了新的廣告詞!”輕輕松松30,手機滿電!“  據(jù)外媒報道,以色列一家創(chuàng)業(yè)公司StoreDot研發(fā)了一套新的手機充電系統(tǒng),充電速度
    發(fā)表于 01-12 16:40

    十一天學會Linux驅(qū)動編程計劃(第一天)

    本帖最后由 求學之路有你 于 2018-1-16 11:43 編輯 十一天學會Linux驅(qū)動編程計劃(第一天)簡單的Linux驅(qū)動,實現(xiàn)打印功能,對Linux驅(qū)動模塊有一個基本認識。代碼如下
    發(fā)表于 01-14 11:58

    請問我可以學習任何USAT匯編代碼片段來獲得USTAR1的運行嗎?

    嗨,伙計們,對于PIC32 MX460我可以學習任何USAT匯編代碼片段來獲得USTAR1的運行嗎?請讓我知道。謝謝大家,祝你們有美好的一天。Pete: 以上來自于百度翻譯 以下為原文 Hi
    發(fā)表于 06-19 10:05

    求提供一個使用IOBUF原語的小型VHDL代碼片段

    嗨,有人可以為我提供一個使用IOBUF原語的小型VHDL代碼片段。帶著敬意vjose2以上來自于谷歌翻譯以下為原文Hi , Can someone provide me with an small
    發(fā)表于 06-27 09:01

    在RT-Thread studio中Codeexpander代碼片段軟件不起作用是什么原因

    不知道有沒有人使用Codeexpander代碼片段管理軟件,在VScode、keil中,都可以使用,給自己寫好的代碼片段設置一個快捷鍵比如sthread,就可以直接輸入自己編寫的thr
    發(fā)表于 08-30 14:20

    在RT-Thread studio中Codeexpander代碼片段軟件不起作用是何原因?

    不知道有沒有人使用Codeexpander代碼片段管理軟件,在VScode、keil中,都可以使用,給自己寫好的代碼片段設置一個快捷鍵比如sthread,就可以直接輸入自己編寫的thr
    發(fā)表于 02-10 14:21

    30遞減計數(shù)器電路

    電子發(fā)燒友為您提供了30遞減計數(shù)器電路,該電路非常實用,用到了顯示屏以及部分芯片等電子元器件
    發(fā)表于 07-01 09:56 ?2288次閱讀
    <b class='flag-5'>30</b><b class='flag-5'>秒</b>遞減計數(shù)器電路

    如何教30優(yōu)化到0.01詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是如何教30優(yōu)化到0.01詳細資料說明。
    發(fā)表于 07-23 17:37 ?1次下載
    如何教<b class='flag-5'>30</b><b class='flag-5'>秒</b>優(yōu)化到0.01<b class='flag-5'>秒</b>詳細資料說明

    30代碼就能讓20噸的發(fā)電機原地爆炸?

    這是美國國安部進行的一項秘密實驗,當時的一位員工邁克·阿桑特(Mike Assante)僅用30代碼,對重達27噸的發(fā)電機進行了代碼攻擊,就成功讓后者發(fā)生了爆炸。
    的頭像 發(fā)表于 11-23 11:22 ?1442次閱讀

    如何將若干視頻片段還原成原視頻?

    最多的功能就是切割功能,然后刪除和拼接視頻片接。 沒有剪過視頻的讀者可能不知道,在常用的剪輯軟件中視頻被切割成若干片段之后,每個片段都可以還原成原始視頻。 就比如一個 10 的視頻,在中間切一刀剪成兩個 5
    的頭像 發(fā)表于 05-13 11:23 ?9047次閱讀
    如何將若干視頻<b class='flag-5'>片段</b>還原成原視頻?

    華為移動服務中接觸衛(wèi)士的代碼片段

    簡介 該項目是華為移動服務中接觸衛(wèi)士的代碼片段,主要包括:密鑰管理、藍牙(BLE)任務管理、密鑰文件分析、數(shù)據(jù)存儲。本項目還提供了示例代碼,為您展示如何在已集成Google Exposure
    發(fā)表于 04-13 09:45 ?5次下載

    讓AI學會畫手的方法來了,給輸入加個buff就能控制生成細節(jié)

    相比之下,原擴散模型經(jīng)過幾十億張圖片的預訓練,因此參數(shù)是被“鎖定”的。而這個“可訓練副本”只需要在特定任務的小數(shù)據(jù)集上訓練,就能學會條件控制。
    的頭像 發(fā)表于 02-21 11:00 ?1235次閱讀

    20個解決日常問題的Python代碼片段

    在本文中,將分享20 個 Python 代碼片段,以幫助你應對日常編程挑戰(zhàn)。你可能已經(jīng)知道其中一些片段,但有些其他片段對你來說可能是新的。趕緊使用這些有用的 Python
    的頭像 發(fā)表于 03-13 09:40 ?970次閱讀

    C2000 DCSM ROM代碼片段/ROP漏洞

    電子發(fā)燒友網(wǎng)站提供《C2000 DCSM ROM代碼片段/ROP漏洞.pdf》資料免費下載
    發(fā)表于 08-28 09:39 ?0次下載
    C2000 DCSM ROM<b class='flag-5'>代碼</b><b class='flag-5'>片段</b>/ROP漏洞