python-将一个列表切分成多个小列表,多组数据扁平的保存在一个列表了,要怎么拆分。


运行环境 Runtime environment

1
2
3
操作系统: Windos10  
IDE: pycharm 2021.3.1 x64
语言: python v3.9.1

背景

数据采集,有时会采集到类似这样场景的数据结构。

1
list_info = ['name zhangsan','age 10','sex man','name lisi','age 11','sex women']

可以观察到列表中每三个元素为一条数据,按理说一条应该被封装起来,变成这种格式

1
list_info = [['name zhangsan','age 10','sex man'],['name lisi','age 11','sex women']]

是把 有规律的 扁平列表的拆分。

code

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def list_of_groups(list_info, per_list_len):
'''
:param list_info: 列表
:param per_list_len: 每个小列表的长度
:return:
'''
list_of_group = zip(*(iter(list_info),) *per_list_len)
end_list = [list(i) for i in list_of_group] # i is a tuple
count = len(list_info) % per_list_len
end_list.append(list_info[-count:]) if count !=0 else end_list
return end_list

if __name__ == '__main__':
list_info = ['name zhangsan', 'age 10', 'sex man', 'name lisi', 'age 11', 'sex women']
ret = list_of_groups(list_info,3)
print(ret)

方法二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def list_split(cls, temp_list, step) -> list:
"""
大列表拆分成小列表
:param step: int, 每个小列表的长度
:param temp_list: list, 需要拆分的大列表
:return:
"""
step = int(step)
return [temp_list[i:i + step] for i in range(0, len(temp_list), step)]

if __name__ == '__main__':
list_info = ['name zhangsan', 'age 10', 'sex man', 'name lisi', 'age 11', 'sex women']
ret = list_split(list_info,3)
print(ret)

总结

第一种方法是网上查来的,第二种是我个人理解的升华。

这样的方法适用于每组数据结构规律的列表

规律的情况(三三成组):

list_info = [‘name zhangsan’,’age 10’,’sex man’,’name lisi’,’age 11’,’sex women’]

不规律的情况(二三(不定)成组)

list_info = [‘name zhangsan’,’sex man’,’name lisi’,’age 11’,’sex women’]

长度不规律的情况就不适用了