python3實用程式設計技巧 資料結構

2022-07-27 12:03:16 字數 3174 閱讀 5076

1. 如何拆分包含多種分隔符的字串

例: >>> s='ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

********************str.split 缺點: 每次只能處理一種分隔符, 推薦:只有乙個分隔符進行分割的時候使用***********************

extend 

sum, reduce

>>> s.split(';')

['ab', 'cd|efg|hi,jkl|mn\topq', 'rst,uvw\txyz']

>>> [ss.split("|") for ss in s.split(";")]

[['ab'], ['cd', 'efg', 'hi,jkl', 'mn\topq'], ['rst,uvw\txyz']]

>>>

>>>

>>> lambda ss:ss.split("|"),s.split(";")

(at 0x000002db4aa11ca8>, ['ab', 'cd|efg|hi,jkl|mn\topq', 'rst,uvw\txyz'])

>>>

>>> map(lambda ss:ss.split("|"),s.split(";"))

>>> list(map(lambda ss:ss.split("|"),s.split(";")))

[['ab'], ['cd', 'efg', 'hi,jkl', 'mn\topq'], ['rst,uvw\txyz']]

>>>

>>> t=

>>> list(map(t.extend,ss.split("|") for ss in s.split(";")))

syntaxerror: invalid character in identifier

>>> list(map(t.extend,[ss.split("|") for ss in s.split(";")]))

[none, none, none]

>>> t

['ab', 'cd', 'efg', 'hi,jkl', 'mn\topq', 'rst,uvw\txyz']

s='ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

函式:def my_split(s,seps):

res=[s]

for sep in seps:

t=list(map(lambda ss:t.extend(ss.split(sep)),res))

res = t

return res

print (my_split(s,",;|\t"))

s='ab;cd|efg|hi,jklmn\topq;rst,uvw\txyz'

k =sum([ss.split("|") for ss in s.split(";")])

print (k)

>>>['ab', 'cd', 'efg', 'hi,jkl', 'mn\topq', 'rst,uvw\txyz']

from functools import reduce

my_split

= lambda s, seqs: reduce(lambda l,sep:sum(map(lambda ss:ss.split(sep),l), ), seqs, [s])

print (kk)

python 直接將list 整體轉化-----------map():

>>> results =['1','2','3'] 轉化為下面這個樣子[1,2,3]

python2

>>>map(int,results)

python3:

>>>list(map(int,results))

[1, 2, 3]

********************************正規表示式:re.split****************************

推薦: 多個分隔符的時候用,只有乙個分割符的話,考慮到效能,建議使用str.split, 

>>>import re

>>>print (re.split("[;,|\t]+",s))

>>>['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

2. 如何在列表,字典,集合中根據條件篩選資料

例:

基礎方法

推薦使用

list:

隨機生成乙個list:

from ramdom import ramdint 

[randint(-50, 50) for _ in range(10)]

#[-50, -10, 40, 19, 38, 42, 4, 17, -34, -37]

例:res =

for l in test_list:

if l>=0:

print (res)

列表解析和filter函式:

print ([x for x in test_list if x>=0])

filter(lambda x:x>0,test_list)

注意在python3中:filter返回的是乙個生成器物件,在python2裡面可以直接返回乙個列表

要直接獲取最後的list結果的話,需要:

list(filter(lambda x:x>0,test_list))

字典:隨機生成乙個字典:

#字典解析:

filter:

dict(filter(lambda item:item[1]>=90, g.items()))

集合:集合解析:

3. 如何給元組裡面的元素命名,提高程式的可讀性

python3介面程式設計 Python3程式設計技巧

in 1 fromrandom import randint in 2 data randint 10,10 for in range 10 in 3 data out 3 3,4,3,4,7,2,4,1,7,9 過濾列表中的負數 in 9 list filter lambda x x 0,data...

python3的使用技巧

字典合併 d1 d2 d3 d1.updatr d2 d1.updatr d3 python3.5以上 生成新的字典 d1 d2 d3 也可以快速的生成字典 字典訪問 d d name d.get name 訪問name對應的value c d.get nam unknow 當訪問不存在的key,會...

Python3 語法小技巧

python現在應用領域越來越廣泛,在寫的同時,養成良好習慣記錄是非常有意義的,大家都知道python入門容易精通很難,今天分享一下有意思的 0x01 想必我們經常有用到過陣列,但這樣的資料結構一定涉及到排序,取最大值,取最小值,下面就是乙個小栗子 import heapq nums 10,22,4...