在python中组合2个列表,使得相应索引处的元素在一起

时间:2017-04-02 06:52:48

标签: python list python-3.x concatenation itertools

我有两个列表,如:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

我想将它们结合起来得到:

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

如何在不使用循环的情况下执行此操作?

5 个答案:

答案 0 :(得分:1)

您可以使用itertoolszip

<强>代码:

import itertools as it
list(it.chain(*zip(listone, listtwo)))

测试代码:

listone = [1, 2, 3]
listtwo = [4, 5, 6]
print(list(it.chain(*zip(listone, listtwo))))

<强>结果:

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

答案 1 :(得分:1)

您可以使用列表的列表切片功能:

>>> new_list = listone + listtwo  # create initial list of `len` equal
                                  # to `listone + listtwo`
>>> new_list[::2] = listone
>>> new_list[1::2] = listtwo
>>> new_list
[1, 4, 2, 5, 3, 6]

实现此目的的另一种非常简单的方法是将zip()与嵌套的列表理解表达式一起使用:

>>> listone = [1, 2, 3]
>>> listtwo = [4, 5, 6]

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

答案 2 :(得分:0)

这是使用zip和嵌套list comprehension

的变体
#include<iostream>
using namespace std;

void swap(int* a,int* b) 
{
    int temp=*a;
    *a=*b;
    *b=temp;
}

void sort(int* p[],int n) 
{
    for(int i=0; i<n;i++)
    {
        if(*p[i]>*p[i+1])
        swap(p[i],p[i+1]);
    }
}

int main()
{
    int arr[]={8,6,5,4,3,7,1};
    int* p[7];

    for(int i=0;i<7;i++)
    {
        p[i]=&arr[i];
    }

    sort(p,7);

    /*i tried to change arr[1] to p[1] or *p[1] but same output*/
    cout<<arr[1]<<arr[2];
    return 0;
}

答案 3 :(得分:-1)

您可以使用numpy(作为here

import numpy as np

listone = [1, 2, 3] 
listtwo = [4, 5, 6]

l=np.empty((len(listone)+len(listtwo)))
l[0::2]=listone
l[1::2]=listtwo

print l
>>> l = [ 1.  4.  2.  5.  3.  6.]

答案 4 :(得分:-2)

您可以直接加两个列表。

list_one=[1,2,3]  
list_two=[4,5,6]  
list_one=list_one+list_two  
print(list_one)

>>>list_one=[1,2,3,4,5,6]      

你也可以改变总和的顺序, 然后打印出[4,5,6,1,2,3]。