鱼C论坛

 找回密码
 立即注册
查看: 3838|回复: 14

python中split的用法

[复制链接]
发表于 2016-3-2 20:15:27 | 显示全部楼层 |阅读模式
5鱼币
python的split用法似乎是碰到特定的字符就切片并最终返回一个列表,那么如何实现在特定的字符串后面切片(也就是不删除任何字符)?

最佳答案

查看完整内容

另外提一下,如果分隔符确定是'\n'的话,Python已经提供了方法
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 20:15:28 | 显示全部楼层
另外提一下,如果分隔符确定是'\n'的话,Python已经提供了方法
  1. In [1]: str1 = '\nHello\nWorld\n'

  2. In [2]: str1.splitlines(True)
  3. Out[2]: ['\n', 'Hello\n', 'World\n']

  4. In [3]:

  5. In [3]: str2 = 'Hello\nWorld'     

  6. In [4]: str2.splitlines(True)
  7. Out[4]: ['Hello\n', 'World']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 20:28:07 | 显示全部楼层
没懂你的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-2 20:48:31 | 显示全部楼层

就比如说这样:
  1. a = 'hello!world!'

  2. a.split('!')

  3. ['hello','world','']
复制代码



返回的列表中不含感叹号,而我希望保留感叹号,在感叹号的后面做切片。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 21:28:14 | 显示全部楼层

用正则吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 21:38:57 | 显示全部楼层

用切片?
  1. >>> b,c = a[0:6],a[6:12]
  2. >>> print(b)
  3. hello!
  4. >>> print(c)
  5. world!
  6. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-2 21:47:48 | 显示全部楼层

如果我不知道感叹号是第几个呢?或者我有一大堆感叹号呢?这种情况总不能一个一个数吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 22:12:19 | 显示全部楼层
shadowrocker 发表于 2016-3-2 21:47
如果我不知道感叹号是第几个呢?或者我有一大堆感叹号呢?这种情况总不能一个一个数吧?

str类有自己的find方法,你自己看看?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 22:26:27 | 显示全部楼层
不知道是否满足
  1. root@iZ25uz51fd7Z:/home/VVFock3r# cat test.py
  2. import re
  3.    
  4. def split2(str2, fs):
  5.     l = re.findall(r'(.*?' + fs + ')', str2, re.S)
  6.     if not str2.endswith(fs):
  7.         l.append(str2.split(fs)[-1])
  8.     return l
复制代码

执行结果:
  1. In [1]: from test import split2         

  2. In [2]: str1 = '!Hello!World!'         

  3. In [3]: split2(str1, '!')      
  4. Out[3]: ['!', 'Hello!', 'World!']

  5. In [4]:

  6. In [4]: str2 = '\ndef!Hello!World!\nabc'

  7. In [5]:

  8. In [5]: split2(str2, '!')               
  9. Out[5]: ['\ndef!', 'Hello!', 'World!', '\nabc']

  10. In [6]:
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 22:26:28 | 显示全部楼层
  1. a = 'hello!world!'
  2. b = '!'
  3. list1 = a.split(b)
  4. for i in range(len(list1)):
  5.     if list1[i] != '':
  6.         list1[i] += b
  7.     else:
  8.         list1.pop(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-3 10:02:03 | 显示全部楼层
方法有点笨

  1. a='hello!worldhello!world'
  2. c=[]
  3. while True:
  4.         if a.find('!')==-1:
  5.                 c.append(a)
  6.                 break
  7.         else:
  8.                 b=a.find('!')
  9.                 c.append(a[0:b+1])
  10.                 a=a[b+1:]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-22 11:35:45 | 显示全部楼层

上面的a换成a = '!helloword!hello!world' 就会报错的,‘out of index.......’
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-22 14:52:16 | 显示全部楼层

list1.pop(i)有问题,如果a变量的值最前面有!号的话就会出现问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-22 15:27:26 | 显示全部楼层

改进建议:
a = '!hello!world!'

list1 = a.split('!')

for i in range(len(list1)):
        list1[i] += '!'

list1 = list(set(list1))
if '!' in list1:
        list1.remove('!')
# if '!' in list1:
#         c = list1[:]
#         list1.clear()

#         for each in c:
#                 if each not in list1:
#                         list1.append(each)
#         if '!' in list1:
#                 list1.remove('!')

print(list1)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-22 15:40:44 | 显示全部楼层
xyy1239012884 发表于 2018-3-22 14:52
list1.pop(i)有问题,如果a变量的值最前面有!号的话就会出现问题

新改的:
  1. a = '!hello!world!'
  2. list1 = a.split('!')
  3. if list1[-1] == '':
  4.     list1.pop()
  5. for i in range(len(list1)):
  6.     list1[i] += '!'
  7. print(list1)
  8. #['!', 'hello!', 'world!']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-19 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表