对于字符串分割,python中自带函数:split(),但对于分割数字列表,目前我尚未找到已存在的有效方法,比如以若干个0分割的数字列表:
number_list = [3.2, 2.1, 3, 0, 0, 1, 2.8, 9.6, 4.7, 0, 6.1, 0, 0, 0, 7.5, 3.6, 0.0, 5, 3.3]
我想要将number_list分割成[[3.2, 2.1, 3], [1, 2.8, 9.6, 4.7], [6.1], [7.5, 3.6], [5, 3.3]],自己写了一个函数来实现该功能:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2020/1/28
# @Author : Zhenglin Zhang
# @Email : zzl1124@mail.ustc.edu.cn
# @FileName : main.py
# @Software : Python3.6;PyCharm;Windows10
# @Hardware : Intel Core i7-4712MQ
# @Version : V1.0
# @License : None
# @Copyright:None
# @Brief : Split a number list in python.
def split_from_0in_numlist(number_list):
"""
对含有0的数字列表,以0进行分割
@number_list: 待分割原始列表
Return 多维列表
"""
cache_list = [] # 缓存列表,作为最终得到的多维列表的列表元素
res_list = [] # 最终得到的多维列表
find_zero = False # 寻找0标志位
for num in number_list:
if num == 0: # 找到0则置位
find_zero = True
else:
if find_zero is True: # 将缓存列表添加至结果
res_list.append(cache_list)
cache_list = [] # 缓存清空,注意不能使用cache_list.clear(),以防res_list同时被清空
find_zero = False # 复位
cache_list.append(num) # 非0则保存
res_list.append(cache_list) # 最后一个缓存元素添加至结果
while [] in res_list: # 删除空元素,避免列表首元素为空时,该空元素被保留
res_list.remove([])
return res_list # 返回多维结果列表
举个栗子:
a = [3.2, 2.1, 3, 0, 0, 1, 2.8, 9.6, 4.7, 0, 6.1, 0, 0, 0, 7.5, 3.6, 0.0, 5, 3.3]
res = split_from_0in_numlist(a)
print("-------")
print(res)
print("-------")
for i in res:
print(i)
输出为:
-------
[[3.2, 2.1, 3], [1, 2.8, 9.6, 4.7], [6.1], [7.5, 3.6], [5, 3.3]]
-------
[3.2, 2.1, 3]
[1, 2.8, 9.6, 4.7]
[6.1]
[7.5, 3.6]
[5, 3.3]
另外一个思路:先将数字列表转换成字符串,再用字符串分割函数split(),以0截取,最后再利用try转换成数字。
同时改写上述函数也可以实现分割其他类型的列表、元祖,甚至是字典等。
End