本文介绍了将列表与列表中不同长度的列表合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试结合历史数据,这些数据来自一个古老的定制电子邮件系统,用Python创建一个数据库。一个列表(b)包含电子邮件ID,另一个列表(a)包含附件的文件名。一封电子邮件可以没有、可以有一个或多个附件。有数千条记录要处理。
我提取了以下格式的数据:
a = [[], ['a'], ['b', 'c', 'd']] b = ['c1', 'c2', 'c3']我希望删除‘a’中的空数据,其余数据采用以下格式,但不关心它是列表还是元组。
x = [[['c2', 'a'], [['c3', 'b'], ['c3', 'c'], ['c4', 'd']]]我已尝试使用Zip
x = zip(b, a)但添加到每个
开头 (('c1', []), ('c2', ['a']), ('c3', ['b', 'c', 'd']))我尝试了IterTools Chain:
op = [list(itertools.chain(*i)) for i in zip(b, a)]但结果是:
[['c', '1'], ['c', '2', 'a'], ['c', '3', 'b', 'c', 'd']]我还尝试使用re.findall()将数据转换为更可用的格式,但通常会出现电子邮件ID与文件名不匹配的情况。有很多关于列表和连接等的内容,但我还没有找到任何关于长度可变的列表中的列表的有用内容。
推荐答案我希望我没有理解错您的问题(您的输出中有c4,但我认为应该是c3):
a = [[], ["a"], ["b", "c", "d"]] b = ["c1", "c2", "c3"] out = [[[v, s] for s in l] for v, l in [t for t in zip(b, a) if t[1]]] print(out)打印:
[[["c2", "a"]], [["c3", "b"], ["c3", "c"], ["c3", "d"]]]更多推荐
将列表与列表中不同长度的列表合并
发布评论