在列表理解中应用常量

时间:2013-09-04 20:39:49

标签: python python-2.7

假设我们有一个列表mylist = ['a', 'b', 'c'],我们希望生成另一个列表:['a:1', 'a:2', 'b:1', 'b:2', 'c:1', 'c:2'],它基本上将':1'':2'附加到mylist的每个元素{1}}。

我想知道如果可能的话,如何有效地使用列表理解?

5 个答案:

答案 0 :(得分:6)

像这样:

['%s:%d' % (e, i) for e in mylist for i in (1, 2)]

答案 1 :(得分:5)

我认为最有效的方法是使用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)]

确切的结构可能会有所不同,具体取决于您的常量的定义方式。

答案 2 :(得分:4)

>>> 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']

答案 3 :(得分:3)

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']

答案 4 :(得分:3)

此概念与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']