Работа с каждой созданной сущностью понимания списка - PullRequest
1 голос
/ 08 июня 2011

Я пытаюсь сгенерировать список, используя понимание списка, и я хочу сделать операцию для каждого сгенерированного объекта. Что-то вроде:

a=['1','2','3']
b=['a','b','c']
temp = [[x,y] for x in a for y in b]
c=[]
for t in temp:
    c.append("".join(t))        

Я пробовал что-то вроде:

a=['1','2','3']
b=['a','b','c']
c = ",".join([x,y] for x in a for y in b)

Я знаю, что это не сработает, потому что функции split был дан список списков вместо списка строк. Есть ли лучший способ сделать это за один раз?

Вывод, который я пытаюсь получить, ['1a','1b','1c','2a','2b','2c','3a','3b','3c']

Ответы [ 3 ]

6 голосов
/ 08 июня 2011
>>> [x + y for x in a for y in b]
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
4 голосов
/ 08 июня 2011

То же самое с помощью itertools:

from itertools import product

print map(''.join, product(['1','2','3'],['a','b','c']))

ИЛИ без:

print map(lambda y: map(lambda x: x+y, a), b)

ИЛИ, если у вас есть список целых чисел:

print map(''.join, product(map(str, xrange(1,4)), ['a','b','c']))
1 голос
/ 08 июня 2011
from itertools import product
[x+y for x,y in product(a,b)]

или

from itertools import product, starmap
starmap(str.__add__, product(a,b))
...