在 Python 中结合两种不同的可迭代类型

Posted

技术标签:

【中文标题】在 Python 中结合两种不同的可迭代类型【英文标题】:Combining two different iterable types in Python 【发布时间】:2013-07-05 06:11:18 【问题描述】:

假设我有两种类型的可迭代对象,一种是列表,另一种是生成器对象(或者如果更容易将两者都视为列表)

该列表具有以下元素:list = [1,2,3,4,5,6,7,8,9] 另一方面,生成器在每次迭代中产生一个元组列表,产生的列表如下所示:ylist = [(3,"three"),(4,"four"),(5,"five")]

我希望能够获得如下所示的列表:finallist = [1,2,(3,"three"),(4,"four"),(5,"five"),6,7,8,9]

我如何做到这一点?

【问题讨论】:

如果元组列表包含其他列表中不存在的元素会怎样?例如,如何将 [1, 2, 3][(5, "five")] 结合起来? 你没有连接迭代。连接会将一个项目粘贴到另一个的末端。 我认为你想包含你的实际代码,并解释你为什么要这样做。最终的对象是什么意思? 【参考方案1】:

将该生成器的返回项转换为字典,然后使用列表推导:

>>> lis = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ylist = [(3, "three"),(4, "four"),(5, "five")]
>>> dic = dict(ylist)
>>> [x if x not in dic else (x, dic[x])  for x in lis]
[1, 2, (3, 'three'), (4, 'four'), (5, 'five'), 6, 7, 8, 9]

【讨论】:

以上是关于在 Python 中结合两种不同的可迭代类型的主要内容,如果未能解决你的问题,请参考以下文章

Python基本数据类型--集合

Python open和read功能的不同返回对象

如何使用python在mongodb的两种不同类型的字段或索引或标题中搜索值?

python三大类型数据筛选

Python 生成器以及应用

python