python – interleaving 2个不等长的列表

python – interleaving 2个不等长的列表,第1张

概述参见英文答案 > how to interleaving lists                                     2个 我希望能够交错两个可能长度不等列表.我有的是: def interleave(xs,ys): a=xs b=ys c=a+b c[::2]=a c[1::2]=b return c 这适用于长度相等或只 参见英文答案 > how to interleaving lists                                     2个
我希望能够交错两个可能长度不等的列表.我有的是:

def interleave(xs,ys):    a=xs    b=ys    c=a+b    c[::2]=a    c[1::2]=b    return c

这适用于长度相等或只是/ -1的列表.但是如果让我们说xs = [1,2,3]和ys = [“hi,”bye“,”no“,”yes“,”why“]这条消息出现:

c[::2]=aValueError: attempt to assign sequence of size 3 to extended slice of size 4

如何使用索引修复此问题?或者我必须使用for循环?
编辑:我想要的是让额外的值出现在最后.

解决方法 你可以在这里使用 itertools.izip_longest

>>> from itertools import izip_longest>>> xs = [1,3]>>> ys = ["hi","bye","no","yes","why"]>>> s = object()>>> [y for x in izip_longest(xs,ys,fillvalue=s) for y in x if y is not s][1,'hi','bye',3,'no','yes','why']

使用itertools的roundrobin配方,此处不需要哨兵值:

from itertools import *def roundrobin(*iterables):    "roundrobin('ABC','D','EF') --> A D E B F C"    # Recipe credited to George Sakkis    pending = len(iterables)    nexts = cycle(iter(it).next for it in iterables)    while pending:        try:            for next in nexts:                yIEld next()        except stopiteration:            pending -= 1            nexts = cycle(islice(nexts,pending))

演示:

>>> List(roundrobin(xs,ys))[1,'why']>>> List(roundrobin(ys,xs))['hi',1,'why']
总结

以上是内存溢出为你收集整理的python – interleaving 2个不等长的列表全部内容,希望文章能够帮你解决python – interleaving 2个不等长的列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存