<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          30個(gè)Python極簡(jiǎn)代碼,10分鐘get常用技巧!

          共 1705字,需瀏覽 4分鐘

           ·

          2020-08-25 16:24

          作者:Fatos Morina
          來源:http://dwz.date/bYre

          學(xué) Python 怎樣才最快,當(dāng)然是實(shí)戰(zhàn)各種小項(xiàng)目,只有自己去想與寫,才記得住規(guī)則。本文是 30 個(gè)極簡(jiǎn)任務(wù),初學(xué)者可以嘗試著自己實(shí)現(xiàn);本文同樣也是 30 段代碼,Python 開發(fā)者也可以看看是不是有沒想到的用法。

          Python 是機(jī)器學(xué)習(xí)最廣泛采用的編程語言,它最重要的優(yōu)勢(shì)在于編程的易用性。如果讀者對(duì)基本的 Python 語法已經(jīng)有一些了解,那么這篇文章可能會(huì)給你一些啟發(fā)。作者簡(jiǎn)單概覽了 30 段代碼,它們都是平常非常實(shí)用的技巧,我們只要花幾分鐘就能從頭到尾瀏覽一遍。

          1.重復(fù)元素判定

          以下方法可以檢查給定列表是不是存在重復(fù)元素,它會(huì)使用 set() 函數(shù)來移除所有重復(fù)元素。

          def?all_unique(lst):
          return?len(lst)==?len(set(lst))
          x?=?[1,1,2,2,3,2,3,4,5,6]
          y?=?[1,2,3,4,5]
          all_unique(x)?#?False
          all_unique(y)?#?True

          2.字符元素組成判定

          檢查兩個(gè)字符串的組成元素是不是一樣的。

          from?collections?import?Counter
          def?anagram(first,?second):
          return?Counter(first)?==?Counter(second)
          anagram("abcd3",?"3acdb")?#?True

          3.內(nèi)存占用

          import?sys
          variable?=?30
          print(sys.getsizeof(variable))?#?24

          4.字節(jié)占用

          下面的代碼塊可以檢查字符串占用的字節(jié)數(shù)。

          def?byte_size(string):
          return(len(string.encode('utf-8')))
          byte_size('')?#?4
          byte_size('Hello?World')?#?11

          5.打印 N 次字符串

          該代碼塊不需要循環(huán)語句就能打印 N 次字符串。

          n?=?2
          s?="Programming"
          print(s?*?n)
          #?ProgrammingProgramming

          6.大寫第一個(gè)字母

          以下代碼塊會(huì)使用 title() 方法,從而大寫字符串中每一個(gè)單詞的首字母。

          s?=?"programming?is?awesome"
          print(s.title())
          #?Programming?Is?Awesome

          7.分塊

          給定具體的大小,定義一個(gè)函數(shù)以按照這個(gè)大小切割列表。

          from?math?import?ceil
          def?chunk(lst,?size):
          return?list(
          map(lambda?x:?lst[x?*?size:x?*?size?+?size],
          list(range(0,?ceil(len(lst)?/?size)))))
          chunk([1,2,3,4,5],2)
          #?[[1,2],[3,4],5]

          8.壓縮

          這個(gè)方法可以將布爾型的值去掉,例如(False,None,0,“”),它使用 filter() 函數(shù)。

          def?compact(lst):
          return?list(filter(bool,?lst))
          compact([0,?1,?False,?2,?'',?3,?'a',?'s',?34])
          #?[?1,?2,?3,?'a',?'s',?34?]

          9.解包

          如下代碼段可以將打包好的成對(duì)列表解開成兩組不同的元組。

          array?=?[['a',?'b'],?['c',?'d'],?['e',?'f']]
          transposed?=?zip(*array)
          print(transposed)
          #?[('a',?'c',?'e'),?('b',?'d',?'f')]

          10.鏈?zhǔn)綄?duì)比

          我們可以在一行代碼中使用不同的運(yùn)算符對(duì)比多個(gè)不同的元素。

          a?=?3
          print(?2?#?True
          print(1?==?a?#?False

          11.逗號(hào)連接

          下面的代碼可以將列表連接成單個(gè)字符串,且每一個(gè)元素間的分隔方式設(shè)置為了逗號(hào)。

          hobbies?=?["basketball",?"football",?"swimming"]
          print("My?hobbies?are:?"?+?",?".join(hobbies))
          #?My?hobbies?are:?basketball,?football,?swimming

          12.元音統(tǒng)計(jì)

          以下方法將統(tǒng)計(jì)字符串中的元音 (‘a(chǎn)’, ‘e’, ‘i’, ‘o’, ‘u’) 的個(gè)數(shù),它是通過正則表達(dá)式做的。

          import?re
          def?count_vowels(str):
          return?len(len(re.findall(r'[aeiou]',?str,?re.IGNORECASE)))
          count_vowels('foobar')?#?3
          count_vowels('gym')?#?0

          13.首字母小寫

          如下方法將令給定字符串的第一個(gè)字符統(tǒng)一為小寫。

          def?decapitalize(string):
          return?str[:1].lower()?+?str[1:]
          decapitalize('FooBar')?#?'fooBar'
          decapitalize('FooBar')?#?'fooBar'

          14.展開列表

          該方法將通過遞歸的方式將列表的嵌套展開為單個(gè)列表。

          def?spread(arg):
          ret?=?[]
          for?i?in?arg:
          if?isinstance(i,?list):
          ret.extend(i)
          else:
          ret.append(i)
          return?ret
          def?deep_flatten(lst):
          result?=?[]
          result.extend(
          spread(list(map(lambda?x:?deep_flatten(x)?if?type(x)?==?list?else?x,?lst))))
          return?result
          deep_flatten([1,?[2],?[[3],?4],?5])?#?[1,2,3,4,5]

          15.列表的差

          該方法將返回第一個(gè)列表的元素,其不在第二個(gè)列表內(nèi)。如果同時(shí)要反饋第二個(gè)列表獨(dú)有的元素,還需要加一句 set_b.difference(set_a)。

          def?difference(a,?b):
          set_a?=?set(a)
          set_b?=?set(b)
          comparison?=?set_a.difference(set_b)
          return?list(comparison)
          difference([1,2,3],?[1,2,4])?#?[3]

          16.通過函數(shù)取差

          如下方法首先會(huì)應(yīng)用一個(gè)給定的函數(shù),然后再返回應(yīng)用函數(shù)后結(jié)果有差別的列表元素。

          def?difference_by(a,?b,?fn):
          b?=?set(map(fn,?b))
          return?[item?for?item?in?a?if?fn(item)?not?in?b]
          from?math?import?floor
          difference_by([2.1,?1.2],?[2.3,?3.4],floor)?#?[1.2]
          difference_by([{?'x':?2?},?{?'x':?1?}],?[{?'x':?1?}],?lambda?v?:?v['x'])
          #?[?{?x:?2?}?]

          17.鏈?zhǔn)胶瘮?shù)調(diào)用

          你可以在一行代碼內(nèi)調(diào)用多個(gè)函數(shù)。

          def?add(a,?b):
          return?a?+?b
          def?subtract(a,?b):
          return?a?-?b
          a,?b?=?4,?5
          print((subtract?if?a?>?b?else?add)(a,?b))?#?9

          18.檢查重復(fù)項(xiàng)

          如下代碼將檢查兩個(gè)列表是不是有重復(fù)項(xiàng)。

          def?has_duplicates(lst):
          return?len(lst)?!=?len(set(lst))
          x?=?[1,2,3,4,5,5]
          y?=?[1,2,3,4,5]
          has_duplicates(x)?#?True
          has_duplicates(y)?#?False

          19.合并兩個(gè)字典

          下面的方法將用于合并兩個(gè)字典。

          def?merge_two_dicts(a,?b):
          c?=?a.copy()?#?make?a?copy?of?a?
          c.update(b)?#?modify?keys?and?values?of?a?with?the?once?from?b
          return?c
          a={'x':1,'y':2}
          b={'y':3,'z':4}
          print(merge_two_dicts(a,b))
          #{'y':3,'x':1,'z':4}

          在 Python 3.5 或更高版本中,我們也可以用以下方式合并字典:

          def?merge_dictionaries(a,?b)
          return?{**a,?**b}
          a?=?{?'x':?1,?'y':?2}
          b?=?{?'y':?3,?'z':?4}
          print(merge_dictionaries(a,?b))
          #?{'y':?3,?'x':?1,?'z':?4}

          20.將兩個(gè)列表轉(zhuǎn)化為字典

          如下方法將會(huì)把兩個(gè)列表轉(zhuǎn)化為單個(gè)字典。

          def?to_dictionary(keys,?values):
          return?dict(zip(keys,?values))
          keys?=?["a",?"b",?"c"]
          values?=?[2,?3,?4]
          print(to_dictionary(keys,?values))
          #{'a':?2,?'c':?4,?'b':?3}

          21.使用枚舉

          我們常用 For 循環(huán)來遍歷某個(gè)列表,同樣我們也能枚舉列表的索引與值。

          list?=?["a",?"b",?"c",?"d"]
          for?index,?element?in?enumerate(list):?
          print("Value",?element,?"Index?",?index,?)
          #?('Value',?'a',?'Index?',?0)
          #?('Value',?'b',?'Index?',?1)
          #('Value',?'c',?'Index?',?2)
          #?('Value',?'d',?'Index?',?3)

          22.執(zhí)行時(shí)間

          如下代碼塊可以用來計(jì)算執(zhí)行特定代碼所花費(fèi)的時(shí)間。

          import?time
          start_time?=?time.time()
          a?=?1
          b?=?2
          c?=?a?+?b
          print(c)?#3
          end_time?=?time.time()
          total_time?=?end_time?-?start_time
          print("Time:?",?total_time)
          #?('Time:?',?1.1205673217773438e-05)?

          23.Try else

          我們?cè)谑褂?try/except 語句的時(shí)候也可以加一個(gè) else 子句,如果沒有觸發(fā)錯(cuò)誤的話,這個(gè)子句就會(huì)被運(yùn)行。

          try:
          2*3
          except?TypeError:
          print("An?exception?was?raised")
          else:
          print("Thank?God,?no?exceptions?were?raised.")
          #Thank?God,?no?exceptions?were?raised.

          24.元素頻率

          下面的方法會(huì)根據(jù)元素頻率取列表中最常見的元素。

          def?most_frequent(list):
          return?max(set(list),?key?=?list.count)
          list?=?[1,2,1,2,3,2,1,4,2]
          most_frequent(list)

          25.回文序列

          以下方法會(huì)檢查給定的字符串是不是回文序列,它首先會(huì)把所有字母轉(zhuǎn)化為小寫,并移除非英文字母符號(hào)。最后,它會(huì)對(duì)比字符串與反向字符串是否相等,相等則表示為回文序列。

          def?palindrome(string):
          from?re?import?sub
          s?=?sub('[\W_]',?'',?string.lower())
          return?s?==?s[::-1]
          palindrome('taco?cat')?#?True

          26.不使用 if-else 的計(jì)算子

          這一段代碼可以不使用條件語句就實(shí)現(xiàn)加減乘除、求冪操作,它通過字典這一數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn):

          import?operator
          action?=?{
          "+":?operator.add,
          "-":?operator.sub,
          "/":?operator.truediv,
          "*":?operator.mul,
          "**":?pow
          }
          print(action['-'](50,?25))?#?25

          27.Shuffle

          該算法會(huì)打亂列表元素的順序,它主要會(huì)通過 Fisher-Yates 算法對(duì)新列表進(jìn)行排序:

          from?copy?import?deepcopy
          from?random?import?randint
          def?shuffle(lst):
          temp_lst?=?deepcopy(lst)
          m?=?len(temp_lst)
          while?(m):
          m?-=?1
          i?=?randint(0,?m)
          temp_lst[m],?temp_lst[i]?=?temp_lst[i],?temp_lst[m]
          return?temp_lst
          foo?=?[1,2,3]
          shuffle(foo)?#?[2,3,1]?,?foo?=?[1,2,3]

          28.展開列表

          將列表內(nèi)的所有元素,包括子列表,都展開成一個(gè)列表。

          def?spread(arg):
          ret?=?[]
          for?i?in?arg:if?isinstance(i,?list):
          ret.extend(i)
          else:
          ret.append(i)
          return?ret
          spread([1,2,3,[4,5,6],[7],8,9])?#?[1,2,3,4,5,6,7,8,9]

          29.交換值

          不需要額外的操作就能交換兩個(gè)變量的值。

          def?swap(a,?b):
          return?b,?a
          a,?b?=?-1,?14
          swap(a,?b)?#?(14,?-1)
          spread([1,2,3,[4,5,6],[7],8,9])?#?[1,2,3,4,5,6,7,8,9]

          30.字典默認(rèn)值

          通過 Key 取對(duì)應(yīng)的 Value 值,可以通過以下方式設(shè)置默認(rèn)值。如果 get() 方法沒有設(shè)置默認(rèn)值,那么如果遇到不存在的 Key,則會(huì)返回 None。

          d?=?{'a':?1,?'b':?2}
          print(d.get('c',?3))?#?3

          - END -

          ?推薦閱讀?

          Service Mesh:Istio 的前世今生

          Zabbix 使用微信接收?qǐng)?bào)警信息

          Shell文本處理三劍客:grep、sed、awk

          Java 應(yīng)用運(yùn)維最常見的3個(gè)問題排查思路

          一次搞明白 Docker 容器資源限制

          10 分鐘部署一個(gè) Kubernetes 集群

          部署一套完整的Kubernetes高可用集群(二進(jìn)制)

          Kubernetes 企業(yè)落地核心技術(shù)方案



          點(diǎn)亮,服務(wù)器三年不宕機(jī)

          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码高清视频在线 | 日韩男女操逼 | 亚洲成人无码高清 | 成人精品91 | 色94色欧美 |