Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python编织列表_Python_Function - Fatal编程技术网

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), ()))