gpt4 book ai didi

Python 使用原始迭代器追加列表

转载 作者:行者123 更新时间:2023-12-01 02:58:27 26 4
gpt4 key购买 nike

因此,在 StackOverflow 的帮助下,我能够取得飞跃性的进步,对此我深表感谢。

遗憾的是,我遇到了另一个障碍,我再次希望能够依靠集体提供一些指导。

长话短说,我实际上是按如下方式合并两个列表(在 Python 2.7 中),使用 ration 变量将列表 1 的 2 和 1 放入(在本例中为 2) list 2:

ration = 2
list1 = ['one', 'two', 'three', 'four', 'five']
list2 = ['A', 'B', 'C']
iter_list1 = iter(list1)
iter_list2 = iter(list2)

final = []
try: #broken when one of the iterators runs out (and StopIteration is raised)
while True:
for i in range(0,ratio):
final.append(next(iter_list1))
final.append(next(iter_list2))
except StopIteration:
pass
print(final)

可悲的是,在我的例子中,100% 确定 list1 会比 list2 长得多,因此除了引发错误之外,还会出现 StopIteration,我希望我可以复制 [如果愿意,请复制] list2 直到 list1 运行出来。

给你一个具体的例子:在这种情况下它会起作用并且是:

['one', 'two', 'A', 'three', 'four', 'B', 'five']

但是如果 list1 变得更大(假设 list1 一直持续到 20),它将运行,list1 上将留下 6 - 20 个。期望的结果是:

['one', 'two', 'A', 'three', 'four', 'B', 'five', six, 'C', 'seven', 'eight', 'A', 'nine', 'ten', 'B', .... ]

知道如何继续吗?提前致谢!!

最佳答案

看起来您想为 list2 中的每个项目从 list1 中获取两个项目。

您可以通过将迭代器压缩在一起来实现此目的:

>>> list1 = ['one', 'two', 'three', 'four', 'five']
>>> list2 = ['A', 'B', 'C']
>>> it1 = iter(list1)
>>> it2 = iter(list2)
>>>
>>> zip(it1, it1, it2)
[('one', 'two', 'A'), ('three', 'four', 'B')]

zip 将以循环方式从每个参数中获取下一个元素。在这种特殊情况下,前两个参数是相同的,因此我们从 list1 中获取两个元素,然后继续从 list2 中获取一个元素。

zip 一旦遇到 StopIteration 异常,就会停止从迭代器中提取元素。如果您希望它继续运行并为耗尽的迭代器使用默认值,请查看 itertools.izip_longest(或 Python 3 中的 itertools.zip_longest)。

根据您想要的输出进行编辑:您需要展平结果。这可以通过 itertools.chain 或列表理解来完成。

>>> it1, it2 = iter(list1), iter(list2)
>>> [x for tup in zip(it1, it1, it2) for x in tup]
['one', 'two', 'A', 'three', 'four', 'B']

>>> it1, it2 = iter(list1), iter(list2)
>>> list(chain(*zip(it1, it1, it2)))
['one', 'two', 'A', 'three', 'four', 'B']

关于Python 使用原始迭代器追加列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44022789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com