Usando la comprensión de la lista puedo crear algo simple como esto

['X{}'.format(x) for x in range(2)]

Que produce ['X0', 'X1']. Pero quiero crear cadenas de salida separadas y múltiples, preferiblemente a partir de la misma declaración de comprensión de la lista.

Quiero que mi salida sea ['X0','Y0','Z0','X1','Y1' 'Z1'] naturalmente algo así como ['X{},Y{},Z{}'.format(x,x,x) for x in range(2)], no corta la mostaza.

¿Alguna idea de cómo hacer esto en una línea?

EDITAR: No es primordial que esté en una línea, pero sería bueno.

1
Astrid 14 ene. 2017 a las 03:12

5 respuestas

La mejor respuesta

Aquí hay una manera de hacerlo usando una comprensión anidada :

r = ['{}{}'.format(ch, x) for x in range(2) for ch in 'XYZ']
print(r)
# ['X0', 'Y0', 'Z0', 'X1', 'Y1', 'Z1']
4
Moses Koledoye 14 ene. 2017 a las 00:16

Doble lista de comprensión

reduce([ letter+str(number) for letter in 'ABC' for number in range(x)], [])
3
blue_note 14 ene. 2017 a las 00:17

Y un camino más por recorrer (sigue siendo una frase):

sum([['X{}'.format(x),'Y{}'.format(x),'Z{}'.format(x)] for x in range(2)],[])
# ['X0', 'Y0', 'Z0', 'X1', 'Y1', 'Z1']
1
DYZ 14 ene. 2017 a las 00:17

Prueba esto:

List = ['{}{}'.format(Letter, Num) for Num in range(2) for Letter in 'XYZ']
print(List)
0
Imperial_Sqiud 14 ene. 2017 a las 00:28

Con un poco de ayuda de itertools

In [59]: ["{}{}".format(char,i) for i,char in itertools.product(range(2), "XYZ")]
Out[59]: ['X0', 'Y0', 'Z0', 'X1', 'Y1', 'Z1']
1
inspectorG4dget 14 ene. 2017 a las 00:19