最近需要从excel中组合大量的数据,如需求:
试试用Python来处理数据:
整体思路:读取excel文件,将待处理的单元格读取成一个列表,再进行组合,写入组合完成的数据。
脚本核心:reduce() 函数
该函数先从列表中取出2个元素执行指定函数,并将输出结果与第3个元素传入函数,输出结果再与第4个元素传入函数,…,以此类推,直到列表每个元素都取完
按以上思路:
1、先从excel中单元格取数据生成列表:
list1=[我想,我想去]
list2=[吃]
list3=[火锅,鱼]
2、用reduce函数处理数据:
先将3个列表合成一个嵌套列表:
idealist = [[我想,我想去],[吃],[火锅,鱼]]
看这里:reduce函数会先选取列表中前两个元素:“[我想,我想去],[吃]” 进行指定的处理
这里用循环处理组合两个列表:
str(i) + str(j) for i in list1 for j in list2
什么意思呢?大概两个列表循环元素组合,即:
现在两个列表组合成了这样:
[我想吃,我想去吃]
而此时的idealist从三个元素变成了两个元素(前两个元素组合在一起了):
[[我想吃,我想去吃],[火锅,鱼]]
重点来了:reduce此时会继续按照上面写的列表循环处理这个新列表:
继续以上步骤:
现在idealist就变成了:[[我想吃火锅,我想吃鱼,我想去吃火锅,我想去吃鱼]]
OK~
到此为止idealist已经处理完成,只剩下一个元素了,不会再继续执行,最终结果
idealist = [[我想吃火锅,我想吃鱼,我想去吃火锅,我想去吃鱼]]
把这个结果写入文档就行了,如何写下次再说吧~
整体脚本,对了,是Python3
from functools import reduce
list1=["我想","我想去"]
list2=["吃"]
list3=["火锅","鱼"]
idealist = [list1,list2,list3]
makeup = lambda x: reduce(lambda x, y: [str(i) + str(j) for i in x for j in y], x)
idea = makeup(idealist)
print(idea)