2012-04-23 2 views
2

Можно создать дубликат:
Get the cartesian product of a series of lists in PythonСписок постижения в питоне

Есть ли способ, я могу объединить два список а и б в с использованием списковых в питоне,

a=[1,2,3] 
b=['a','b'] 

c=['1a','1b','2a','2b','3a','3b'] 
+4

возможно дубликат [Получить декартово произведение из серии списков в Python] (http://stackoverflow.com/questions/ 533905/get-the-cartesian-product-of-of-list-in-python) (также см. Http://stackoverflow.com/questions/4481724/python-convert-list-of-char-into -string). –

ответ

6
>>> a = [1,2,3] 
>>> b = ['a', 'b'] 
>>> c = ['%d%c' % (x, y) for x in a for y in b] 
>>> c 
['1a', '1b', '2a', '2b', '3a', '3b'] 
6
>>> from itertools import product 
>>> a=[1,2,3] 
>>> b=['a','b'] 
>>> ['%d%s' % el for el in product(a,b)] 
['1a', '1b', '2a', '2b', '3a', '3b'] 

С новой строкой форматирование

>>> ['{0}{1}'.format(*el) for el in product(a,b)] 
['1a', '1b', '2a', '2b', '3a', '3b'] 
+0

+1 Это лучшее решение, поскольку продукт будет намного более эффективным, чем вложенные циклы, и более гибким. –

2

использование c = ["%d%s" % (x,y) for x in a for y in b]

2

списков могут цикл по нескольким объектам.

In[3]: [str(a1)+b1 for a1 in a for b1 in b] 

Out[3]: ['1a', '1b', '2a', '2b', '3a', '3b'] 

Обратите внимание на небольшую тонкость преобразования числа в строку.

2

Просто используйте «вложенную» версию.

c = [str(i) + j for i in a for j in b] 
1

несколько напоминает вариант решения jamylak в:

>>> import itertools 
>>> a=[1,2,3] 
>>> b=['a','b'] 
>>>[str(x[0])+x[1] for x in itertools.product(a,b)] 
['1a', '1b', '2a', '2b', '3a', '3b'] 
Смежные вопросы