gpt4 book ai didi

python - 如何交错两个不同长度的列表?

转载 作者:太空狗 更新时间:2023-10-30 00:29:00 27 4
gpt4 key购买 nike

我想写一个函数twolists,它给出的结果如下:

outcome = twolists([ ], ['w', 'x', 'y', 'z'])
print(outcome)
['w', 'x', 'y', 'z']

outcome = twolists([0, 1], ['w', 'x'])
print(outcome)
[0, 'w', 1, 'x']

outcome = twolists([0, 1], ['w', 'x', 'y', 'z'])
print(outcome)
[0, 'w', 1, 'x', 'y', 'z']

outcome = twolists([0, 1, 2, 3], ['w', 'x'])
print(outcome)
[0, 'w', 1, 'x', 2, 3]

到目前为止我有这个:

def twolists(list1, list2): # don't forget to return final_list
alt_list = []
a1 = len(list1)
a2 = len(list2)

for i in range(# ? ):
# append one thing from list1 to alt_list - How?
# append one thing from list2 to alt_list - How?

如何完成代码?

最佳答案

这使用来自 itertoolszip_longest 组成了一个列表推导式(这是标准库的一部分)将两个列表中的项目交织到一个 tuple 中,默认情况下使用 None 作为填充值。

这也使用 chain 也来自 itertools 来展平列表。

最后它从列表中过滤掉 None 项:

from itertools import chain, zip_longest
def twolists(l1, l2):
return [x for x in chain(*zip_longest(l1, l2)) if x is not None]

或者按照@EliKorvigo 的建议,使用itertools.chain.from_iterable 进行惰性迭代:

def twolists(l1, l2):
return [x for x in chain.from_iterable(zip_longest(l1, l2)) if x is not None]
测试
In [56]: twolists([0, 1], ['w', 'x'])
Out[56]: [0, 'w', 1, 'x']

In [57]: twolists([0, 1], ['w', 'x', 'y', 'z'])
Out[57]: [0, 'w', 1, 'x', 'y', 'z']

In [74]: twolists([0, 1, 2, 3], ['w', 'x'])
Out[74]: [0, 'w', 1, 'x', 2, 3]

关于python - 如何交错两个不同长度的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199961/

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