本文介绍了将列表与列表中不同长度的列表合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试结合历史数据,这些数据来自一个古老的定制电子邮件系统,用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"]]]
这篇关于将列表与列表中不同长度的列表合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!