我有两个列表,如:
listone = [1, 2, 3]
listtwo = [4, 5, 6]
我想将它们结合起来得到:
l = [1, 4, 2, 5, 3, 6]
如何在不使用循环的情况下执行此操作?
答案 0 :(得分:1)
您可以使用itertools
和zip
:
<强>代码:强>
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]。