我想"编织"两个一起编号。
示例:
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
答案 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
我已经以各种方式更改了您的代码:
<=
,那么它将尝试执行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]