python学习笔记[1]——字符串分割

本文介绍Python中使用split()方法及正则表达式进行字符串分割的技巧,包括如何处理多个分隔符的情况,以及利用map(), lambda和extend()等函数实现复杂分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. python中字符串的分割可以用Python自带的split属性:

例如:

s='abcd/efdkk|hkkll,hooll'
s.split()

输出结果为

['abcd/efdkk|hkkll,hooll']

这里面调用了python自带的split()方法,默认输入的分隔符号是: 空格,tab等空字符
当然也可以通过指定分隔符号改变分隔方法:

s.split('|')

输出为:

['abcd/efdkk', 'hkkll,hooll']

这就是指定‘|’为分隔符号时,split()方法根据’|'分隔字符串

以上是简单的分隔字符串的方法,但是split()方法有一个缺点,就是一次只能传入一个分隔字符。如果现在我们的需求是将字符串:

s='abcd/efdkk|hkkll,hooll'

根据符号:’,’ ‘|’ ‘/’ 这三个符号将s分隔成

['abcd', 'efdkk', 'hkkll', 'hooll']

这样的目标形式,split()方法就无能为力了。

  1. 使用正则表达式。
import re #正则表达式
re.split('[|,/]',s)
#正则表达式中也有split方法,该语句表示,将s字符串按集合
#[|,/] 中的元素分隔。[|,/]表示该集合下包括/ ,| 三个符号,正则表达式的方法将按照该集合中的字符将字符串分开

结果如下:

['abcd', 'efdkk', 'hkkll', 'hooll']
  1. 是否可以通过python 自带的split()方法实现呢?

答案是肯定的,先上代码:

def allsplit(s,ds):
    res=[s]    
    for d in ds: 
        t=[]         
        list(map(lambda x: t.extend(x.split(d)),res))
        res=t 
    return t     
s='abcd/efdkk|hkkll,hooll'
ds='\/|,'
print(allsplit(s,ds))

运行结果:

['abcd', 'efdkk', 'hkkll', 'hooll']

这里面用到了python中的容器函数map() 匿名函数 lambda 列表扩展方法extend。做一些必要说明:
map(function,iterable object):
容器函数map() 作用是对可迭代对象中的每一个元素均实现同样的操作
举例:

def add(x):
    add=x+1
    return  add
print(list(map(add,[1,2,3,4])))

map函数将可迭代对象[1,2,3,4]中每个元素加上1
输出结果为:

[2, 3, 4, 5]

这里值得一提的就是python3中的map函数和python2 中的map的区别,在python2中,map 函数返回的就是一个列表,如果是在python2中,输出可以直接写成:

print map(add,[1,2,3,4])

但是在python3 中,map函数返回的是一个可迭代对象,如果直接使用

print(map(add,[1,2,3,4]))

那么打印出的值为:

<map object at 0x000001F0D05F32E8>

因此在代码中使用了list()将该可迭代对象转化成list后,才能显示出想要的结果。

匿名函数lambda
该函数使用方法如下:
lambda varibles: function
举例:

f=lambda x:x+1
print(f(1))

输出如下:

2

匿名函数常常应用于函数的闭包。

有了以上的基础储备,重新审视代码:

def allsplit(s,ds):
    res=[s]    
    
    #将s字符串转化成列表['abcd/efdkk|hkkll,hooll']
    
    for d in ds: 
    
    # ds是'\/|,' ,d依次为'\','/',',',每次通过d将s分隔成按相应字符串分隔
    #的字符串列表
    
        t=[]         
        
        #t在每次循环都重新初始化
        
        list(map(lambda x: t.extend(x.split(d)),res)) 
        
        #python3中需要将map对象转化成list,否则,t没有变化
        #map(lambda x: t.extend(x.split(d)),res)作用是将传入的res字
        #串列表按照d字符分隔,例如:如果res=['abcd','efdkk|hkkll,holl']
        #经过此行,d如果为|,res字符串:res=['abcd','efdkk|hkkll,holl']转化为
        #['abcd','efdkk','hkkll,holl'],这些字符串都被扩展到t对象中(t.extend(x.split(d)))
        
        res=t
        
        #更新res, 所以循环下一次传入的res值是已经按照上一个字符分隔好的字符串列
        #表
        
    return t     
s='abcd/efdkk|hkkll,hooll'
ds='\/|,'
print(allsplit(s,ds))

输出结果

['abcd', 'efdkk', 'hkkll', 'hooll']

总结,用正则表达式可以快捷地分隔字符串,这里不厌其烦地使用python自带split()主要是为了应用python中一些特性,实战中正则表达式是王道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值