es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear listas a partir de un producto cartesiano de dos listas de cadenas.

Tengo dos listas de cadenas que se ven así:

print(objects_list)
print(verb_list)

y su salida es:

['parking_meter', 'sink', 'teddy_bear']
['sail', 'fill', 'fly', 'greet', 'hit', 'hose', 'hunt', 'install',
 'kick', 'launch', 'move', 'pick', 'repair', 'sit_at', 'squeeze',
 'stab', 'straddle', 'talk_on']

Quiero el producto de estas dos listas en un formato que se vea así:

[['parking_meter','sail'],['parking_meter','fill'],['parking_meter','fly']...]

Intenté este código:

list3 = [[str(l),str(n)] for l in objects_list for n in verb_list]
print(list3)

pero imprime:

[['[', '['], ['[', '""'], ['[', 's'], ['[', 'a'], ['[', 'i'], ['[', 'l'],
 ['[', '""'], ['[', ','], ['[', ' '], ['[', '""'], ['[', 'f'], ['[', 'i'],
 ['[', 'l'], ['[', 'l'], ['[', '""'], ['[', ','], ['[', ' '], ['[', '""'],
 ['[', 'f'], ['[', 'l'], ['[', 'y'], [...]

¿Alguna solución?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, su código parece estar convirtiendo cada elemento de la lista en una cadena antes de crear el producto cartesiano, lo que lleva a una salida incorrecta. Para solucionar esto, puede utilizar la función product del módulo itertools de la siguiente manera:

    from itertools import product
    
    objects_list = ['parking_meter', 'sink', 'teddy_bear']
    verb_list = ['sail', 'fill', 'fly', 'greet', 'hit', 'hose', 'hunt', 'install', 'kick', 'launch', 'move', 'pick', 'repair', 'sit_at', 'squeeze', 'stab', 'straddle', 'talk_on']
    
    result = list(product(objects_list, verb_list))
    
    print(result)
    

    Esto debería darle la salida deseada:

    [('parking_meter', 'sail'), ('parking_meter', 'fill'), ('parking_meter', 'fly'), ('parking_meter', 'greet'), ('parking_meter', 'hit'), ('parking_meter', 'hose'), ('parking_meter', 'hunt'), ('parking_meter', 'install'), ('parking_meter', 'kick'), ('parking_meter', 'launch'), ('parking_meter', 'move'), ('parking_meter', 'pick'), ('parking_meter', 'repair'), ('parking_meter', 'sit_at'), ('parking_meter', 'squeeze'), ('parking_meter', 'stab'), ('parking_meter', 'straddle'), ('parking_meter', 'talk_on'), ('sink', 'sail'), ('sink', 'fill'), ('sink', 'fly'), ('sink', 'greet'), ('sink', 'hit'), ('sink', 'hose'), ('sink', 'hunt'), ('sink', 'install'), ('sink', 'kick'), ('sink', 'launch'), ('sink', 'move'), ('sink', 'pick'), ('sink', 'repair'), ('sink', 'sit_at'), ('sink', 'squeeze'), ('sink', 'stab'), ('sink', 'straddle'), ('sink', 'talk_on'), ('teddy_bear', 'sail'), ('teddy_bear', 'fill'), ('teddy_bear', 'fly'), ('teddy_bear', 'greet'), ('teddy_bear', 'hit'), ('teddy_bear', 'hose'), ('teddy_bear', 'hunt'), ('teddy_bear', 'install'), ('teddy_bear', 'kick'), ('teddy_bear', 'launch'), ('teddy_bear', 'move'), ('teddy_bear', 'pick'), ('teddy_bear', 'repair'), ('teddy_bear', 'sit_at'), ('teddy_bear', 'squeeze'), ('teddy_bear', 'stab'), ('teddy_bear', 'straddle'), ('teddy_bear', 'talk_on')]
    

    Tenga en cuenta que la salida es una lista de tuplas, pero puede convertirla fácilmente en una lista de listas si es necesario:

    result = [list(pair) for pair in product(objects_list, verb_list)]
    

Comments are closed.