Python编织列表

时间:2014-11-27 08:26:33

标签: python function

我想"编织"两个一起编号。

示例:

x = [1,2,3]
y = [4,5,6]

result = [1,4,2,5,3,6]

这是我的功能,我无法找出它为什么不起作用:

def weave(list1,list2):
    lijst = []
    i = 0
    for i <= len(list1):
        lijst += [list1[i]] 
        lijst += [list2[i]] 
        i + 1

8 个答案:

答案 0 :(得分:9)

您可以使用chain模块中的itertools函数来交错两个列表:

x = [1,2,3]
y = [4,5,6]

from itertools import chain
list(chain.from_iterable(zip(x, y)))
# [1, 4, 2, 5, 3, 6]

答案 1 :(得分:2)

Python的for循环与其他可以有条件的语言不同。您需要使用while循环或更改for循环:

def weave(list1,list2):
    lijst = []
    i = 0
    while i < len(list1):
        lijst.append(list1[i])
        lijst.append(list2[i]) 
        i += 1
    return lijst

我已经以各种方式更改了您的代码:

  • 如果您有要循环的条件
  • ,请使用while循环
  • 您希望条件小于长度,不小于或等于。这是因为索引从0开始,如果你做<=,那么它将尝试执行list1[3],这将不存在。
  • 使用list.append将商品添加到列表
  • 您忘记了=
  • 中的i += 1
  • 最后,别忘了返回清单!

您也可以使用zip()

>>> [a for b in zip(x, y) for a in b]
[1, 4, 2, 5, 3, 6]

答案 2 :(得分:1)

您需要在每次迭代时附加列表项,因此请使用list.append并在python中不需要初始化i =0

试试这个: -

>>> a = [1,2 ,3]
>>> b = [4, 5, 6]
>>> list(chain.from_iterable(zip(a, b)))
[1, 4, 2, 5, 3, 6]

答案 3 :(得分:1)

您可以使用此脚本:

reduce(lambda a, b: a+b, zip([1, 2, 3], [4, 5, 6]), ())

注意:

  • zip会成对,add会加入;
  • 您可以使用operator.add代替lambda;
  • 如果列表长度不同,则可以使用
  • itertools.izip

答案 4 :(得分:1)

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> z=[]
>>> for i,j in zip(x,y):
...    z.extend([i,j])
... 
>>> z
[1, 4, 2, 5, 3, 6]

答案 5 :(得分:1)

您还可以通过定义结果列表的偶数和奇数半列来编织列表。

<div ng-controller="ProjectCtrl">
  <ul>
    <li ng-repeat="project in projects">
     <div ng-bind-html="'{{project.icon}}' | to_trusted"></div>- <em>{{project.name}}</em>
    </li>
  </ul>
</div>

答案 6 :(得分:0)

我需要这个,但是有任意数量的可能不同长度的列表,而其他一些更优雅的答案则无法提供。这是一个没有依赖性的简单实现:

def weave_lists(list_of_lists):
    max_index = max([len(sublist) for sublist in list_of_lists])
    weaved_list = []
    for sublist_index in range(max_index):
        for sublist in list_of_lists:
            if len(sublist) > sublist_index:
                weaved_list.append(sublist[sublist_index])
    return weaved_list

print(weave_lists([[1,2], [3,4,5], [6,7,8,9]]))
# [1, 3, 6, 2, 4, 7, 5, 8, 9]

答案 7 :(得分:0)

x = [1,2,3]
y = [4,5,6]
sum(zip(x,y), ())

[1、4、2、5、3、6]