python数据结构编程_python3实用编程技巧——数据结构

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:

res.append(l)

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))

字典:

随机生成一个字典:

{'student%d' % i:randint(50,100) for i in range(1,21)}

#{'student1': 100, 'student2': 97, 'student3': 67, 'student4': 73, 'student5': 67, 'student6': 54, 'student7': 80, 'student8': 83, 'student9': 69, 'student10': 63, 'student11': 69, 'student12': 53, 'student13': 77, 'student14': 75, 'student15': 71, 'student16': 57, 'student17': 61, 'student18': 77, 'student19': 93, 'student20': 93}

字典解析:

{k:v for k,v in d.items() if v>90}

filter:

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

集合:

{randint(0, 30) for _ in range(20)}

集合解析:

{x for x in s if x%3==0}

3. 如何给元组里面的元素命名,提高程序的可读性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值