2013-02-23 59 views
4

我希望把这个列表:Pythonically插入多个值列表

l=["Three","Four","Five","Six"] 

到这一个:

['Three', 3, 'Four', 4, 'Five', 5, 'Six', 6] 

,我用这个代码(效果很好)做到这一点:

for i,j in zip(range(1,len(l)*2,2),range(3,7)*2): 
    l.insert(i,j) 

但我想Python不会为它感到骄傲。有没有更简单的方法呢?

+0

相关:Python的方式,以两个列表交替的方式结合起来?](HTTP: //stackoverflow.com/q/3678869/4279) – jfs 2013-02-23 15:11:00

回答

13

我可能会做这样的事情:

>>> a = ["Three","Four","Five","Six"] 
>>> b = range(3,7) 
>>> zip(a,b) 
[('Three', 3), ('Four', 4), ('Five', 5), ('Six', 6)] 
>>> [term for pair in zip(a,b) for term in pair] 
['Three', 3, 'Four', 4, 'Five', 5, 'Six', 6] 

,或者使用itertools.chain

>>> from itertools import chain 
>>> list(chain.from_iterable(zip(a,b))) 
['Three', 3, 'Four', 4, 'Five', 5, 'Six', 6] 
+0

对于第一个示例中的zip()命令+1。不错。 – mkind 2013-02-23 15:18:46

4
In [124]: l=["Three","Four","Five","Six"] 

In [125]: [x for x in itertools.chain(*zip(l, range(3,7)))] 
Out[125]: ['Three', 3, 'Four', 4, 'Five', 5, 'Six', 6]