La función 'conjunciones' recibe una lista anidada 'word_list'. Esta lista contiene una serie de sublistas, cada una una lista de palabras, como: [["Tom", "Laurel", "Merkel"], ["Jerry","Hardy", "Macron"]]

Todas las sublistas tienen el mismo número de palabras en ellas. La función debe devolver una lista de cadenas, donde cada elemento en una posición es una conjunción "y" de todos los elementos en la misma posición en todas las sublistas.

Por ejemplo: conjunctions([["Tom", "Laurel", "Merkel"],["Jerry","Hardy", "Macron"]]

Debería volver

['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']

Y

conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]]

Debería volver

['one and two and three', 'apples and oranges and bananas']

Para este ejercicio de práctica tuve que agregar diferentes conjunciones de palabras. ¿Hay alguna forma más simple / limpia de hacer esto? Solo se le permite usar la comprensión de la lista.

Además, ¿cómo haría para hacerlo más robusto, p. ¿Permitir que se ingresen varias listas de longitud?

'''

Conjunciones def (word_list):

list1 = []
list2 = []
list3 = []

answer = []

if len(word_list) == 3:
    for i in word_list:
        #print(i[0])
        list1.append((i[0]))
        list2.append((i[1]))
    answer.append(list1[0] + " and " + list1[1] + " and " + list1[2])
    answer.append(list2[0] + " and " + list2[1] + " and " + list2[2])

elif len(word_list) ==2: 
    for i in word_list:
        #print(i[2])
        list1.append((i[0]))
        list2.append((i[1]))
        list3.append((i[2]))
    answer.append(list1[0] + " and " + list1[1])
    answer.append(list2[0] + " and " + list2[1])
    answer.append(list3[0] + " and " + list3[1])

return answer      

'''

Entrada:

conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]])

conjunctions([["Tom", "Laurel", "Merkel"], ["Jerry","Hardy", "Macron"]])

Salida:

['one and two and three', 'apples and oranges and bananas']

['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']
0
Zizi96 3 oct. 2019 a las 22:09

4 respuestas

La mejor respuesta

Puede usar str.join y zip:

def conjunctions(lst):
    return list(' and '.join(words) for words in zip(*lst))

print(conjunctions([["Tom", "Laurel", "Merkel"],["Jerry","Hardy", "Macron"]]))
print(conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]]))

Salida

['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']
['one and two and three', 'apples and oranges and bananas']
4
Dani Mesejo 3 oct. 2019 a las 19:13

Puedes hacer algo como esto:

twoDArray = [["one", "apples"],["two","oranges"], ["three","bananas"]]

answer = [0] * len(twoDArray[0])

for i, array in enumerate(twoDArray):
  for j, value in enumerate(array):
    if (answer[j] == 0):
      answer[j] = value
    else:
      answer[j] = answer[j] + " and " + value

print(answer)

Pruébelo https://repl.it/repls/RightJointOutliers

Podemos inicializar una matriz answer vacía a la longitud de la primera matriz en twoDArray.

answer = [0] * len(twoDArray[0])

Ahora recorremos twoDArray y los valores dentro de cada matriz en array.

for i, array in enumerate(twoDArray):
  for j, value in enumerate(array):

Usamos j el índice del bucle for interno para determinar qué índice en nuestra matriz answer estamos configurando.

Si el valor en el índice j aún no se ha establecido, queremos establecer su value. De lo contrario, agregaremos al value que existe en el índice.

    if (answer[j] == 0):
      answer[j] = value
    else:
      answer[j] = answer[j] + " and " + value
1
roasty 3 oct. 2019 a las 19:47

Puedes hacerlo en cuatro líneas (y probablemente menos):

lst1 = [["Tom", "Laurel", "Merkel"],["Jerry","Hardy", "Macron"]]
lst2 = [["one", "apples"],["two","oranges"],["three","bananas"]]
def conjunctions(lst):
    final_list = []
    for idx,name in enumerate(lst[0]):
        final_list.append(' and '.join([i[idx] for i in lst]))
    return final_list

Salida de conjunctions(lst1):

['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']
0
Juan C 3 oct. 2019 a las 19:18
conjunctions = lambda L: list(map(lambda *names: ' and '.join(names), *L))
print(conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]]))

Salidas

['one and two and three', 'apples and oranges and bananas']
0
kuco 23 3 oct. 2019 a las 19:17
58225467