Python编织列表
我想把两个号码“编织”在一起 例如:Python编织列表,python,function,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 def weave(列表
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
def weave(列表1、列表2):
lijst=[]
i=0
对于iPython的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
您需要在每次迭代时追加列表项,因此使用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]
您可以使用以下脚本:
reduce(lambda a, b: a+b, zip([1, 2, 3], [4, 5, 6]), ())
注:
zip
将配对,add
将加入他们李>
- 您可以使用
运算符。添加而不是lambda李>
- 如果列表的长度不同,则可以使用itertools.izip
您可以使用itertools
模块中的chain
功能交错两个列表:
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]
还可以通过定义结果列表的偶数和奇数半列表来编织列表
x = [1,2,3]
y = [4,5,6]
z = numpy.empty(len(x)+len(y))
z[::2],z[1::2]=x,y
result=z.tolist()
我需要这个,但是有任意数量的可能不同长度的列表,这是其他一些更优雅的答案所不能提供的。以下是一个没有依赖关系的简单实现:
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]
正如其他人所提到的(这是我做这件事的最清晰的方式,因为考虑到chain的语义,它是最容易理解的),您可以通过使用itertools来做到这一点:
from itertools import chain
list(chain.from_iterable(zip(x, y)))
[1,4,2,5,3,6]
但是,您也可以通过以下方式使用元组求和(串联):
[1,4,2,5,3,6]for i Related:You正在使用for
而不是,而每当您在Python中遇到要操作的内容列表时,我会强烈鼓励您在iterables上使用itertools和类似的操作。它更加健壮,可读性也更高。
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]
x = [1,2,3]
y = [4,5,6]
from itertools import chain
list(chain.from_iterable(zip(x, y)))
list(sum(zip(x,y), ()))