Python 无模块列表的交错列表

Python 无模块列表的交错列表,python,Python,假设您有以下列表: list1 = [[1,2,3], [9, 0], [5], [-4,-5,-2,-3,-1]]; 仅使用基本操作和循环,了解如何交错列表,因此结果如下: result = [1,9,5,-4,2,0,-5,3,-2,-3,-1] 我在这里找到的所有解决方案都使用某种库,但我对只使用循环的解决方案感兴趣 我目前的解决办法是: result = [] def interleave(myList): for

假设您有以下列表:

list1 = [[1,2,3], 
         [9, 0], 
         [5], 
         [-4,-5,-2,-3,-1]];
仅使用基本操作和循环,了解如何交错列表,因此结果如下:

result = [1,9,5,-4,2,0,-5,3,-2,-3,-1]
我在这里找到的所有解决方案都使用某种库,但我对只使用循环的解决方案感兴趣

我目前的解决办法是:

result = []

def interleave(myList):
    for i in range(len(myList)):
        if len(myList[i]) == 0:
            continue
        result.append( myList[i][0] )
        del myList[i][0]
    print result

list1 = [[1,2,3], [9, 0], [5], [-4,-5,-2,-3,-1]]
print list1

interleave(list1)
interleave(list1)
interleave(list1)
interleave(list1)
interleave(list1)

现在我的窍门是,如何将这5个调用放入函数中的
interleave
函数,因此我只调用
interleave()
一次。

这可能是使用生成器的一个好选择。一个简单的算法是创建一个迭代器列表,并使用每个迭代器中的一项,如果迭代器为空,则删除该迭代器:

def interleave(l):
    q = [iter(i) for i in l]
    while q:
        n = q.pop(0)
        try:
            yield next(n)
            q.append(n)
        except StopIteration:
            pass

In []:
list(interleave(list1))

Out[]:
[1, 9, 5, -4, 2, 0, -5, 3, -2, -3, -1]
结果:

[1, 9, 5, -4, 2, 0, -5, 3, -2, -3, -1]

另一种方法是:首先,找到长度最大的子列表。然后,对于该长度的数字范围(即长度最大的子列表的索引),循环遍历每个子列表,并检查该范围的当前数字是否小于其长度(这意味着可以在不冒
indexer
风险的情况下获取索引),获取该数字并将其存储在新列表中。下面是演示我想法的代码:

def interleave(inList):
    maximumLength = len(max(inList, key=len))
    return [elem[i] for i in range(maximumLength) for elem in list1 if i < len(elem)]

list1 = [[1,2,3], [9, 0], [5], [-4,-5,-2,-3,-1]]

print(interleave(list1))

张贴您目前掌握的代码,并具体解释您遇到的问题。我们不是来为您做功课的——帮助我们了解您遇到的问题或您考虑过的方法,这是可以回答的。现在你应该解释一下你目前的解决方案到底出了什么问题,以及为什么它会让你感到困惑。@AdamSmith这不是一个家庭作业。我在练习代码,我试图理解基本的算法。不管怎样,我用我现在的答案编辑了这个问题code@AdhySatya一个小小的吹毛求疵:这就是你给自己的家庭作业;)不管怎样,这个问题现在是可以回答的——按照麦克尔维的建议去做,这实际上是一个很好的问题
def interleave(inList):
    maximumLength = len(max(inList, key=len))
    return [elem[i] for i in range(maximumLength) for elem in list1 if i < len(elem)]

list1 = [[1,2,3], [9, 0], [5], [-4,-5,-2,-3,-1]]

print(interleave(list1))
[1, 9, 5, -4, 2, 0, -5, 3, -2, -3, -1]