假设我们有一个 list mylist = ['a', 'b', 'c']
,我们想生成另一个像这样的列表:['a:1', 'a:2', 'b:1', 'b:2', 'c:1', 'c:2']
,它基本上将':1'
and附加':2'
到mylist
.
如果可能的话,我想知道如何使用列表理解有效地做到这一点?
假设我们有一个 list mylist = ['a', 'b', 'c']
,我们想生成另一个像这样的列表:['a:1', 'a:2', 'b:1', 'b:2', 'c:1', 'c:2']
,它基本上将':1'
and附加':2'
到mylist
.
如果可能的话,我想知道如何使用列表理解有效地做到这一点?
像这样:
['%s:%d' % (e, i) for e in mylist for i in (1, 2)]
我认为最有效的方法是itertools.product
:
http://docs.python.org/2/library/itertools.html#itertools.product
from itertools import product
mylist = ['a', 'b', 'c']
mysuffixes = [':1', ':2']
result = [x+y for x, y in product(mylist, mysuffixes)]
确切的构造可能会因常量的定义方式而异。
>>> a=['a','b','c']
>>> b=[1,2]
>>> import itertools
>>> ['%s:%s' % (x,y) for x,y in itertools.product(a,b)]
['a:1', 'a:2', 'b:1', 'b:2', 'c:1', 'c:2']
这个概念和itertools.product
>>> from itertools import product
>>> list(product(mylist, ('1', '2')))
[('a', '1'), ('a', '2'), ('b', '1'), ('b', '2'), ('c', '1'), ('c', '2')]
当产品返回元组时,你必须加入元组,:
我认为这个解决方案是最清晰的:
>>> map(':'.join, product(mylist, ('1', '2')))
['a:1', 'a:2', 'b:1', 'b:2', 'c:1', 'c:2']
In [4]: mylist = ['a', 'b', 'c']
In [5]: list(itertools.chain.from_iterable([[e+":1", e+":2"] for e in mylist]))
Out[5]: ['a:1', 'a:2', 'b:1', 'b:2', 'c:1', 'c:2']