Voy a escribir un programa que toma algunas líneas y las traduce a una sola línea, pero desafortunadamente, tengo un problema al agregar elementos poco comunes. esto es lo que he hecho hasta ahora:

List_of_sentences = []
for line in range(int(input())):
    List_of_sentences.append(input().strip().split())

Sample_sentence = input().split()

Final_list = []

for lists in List_of_sentences:
    for elements in Sample_sentence:
        if elements in lists:
            Final_list.append(lists[0])
        else:
            Final_list.append(elements)
            
print(' '.join(Final_list))

Por ejemplo, considere estas dos listas:

List_of_sentences = [['man', 'I', 'je', 'ich'], ['kheili', 'very', 'très', 'sehr'], ['alaghemand', 'interested', 'intéressé', 'interessiert'], ['barnamenevisi', 'programming', 'laprogrammation', 'Programmierung']]

Sample_sentence = ['I', 'am', 'very', 'interested', 'in', 'programming']

Tiene que devolver esto:

man am kheili alaghemand in barnamenevisi

Pero en vez:

man kheili alaghemand barnamenevisi

Mi problema es con otra parte

Cualquier ayuda es muy apreciada

0
Mehran 22 ene. 2021 a las 18:19

5 respuestas

La mejor respuesta

Tu bucle parece un poco desordenado. Debería ser como este orden

List_of_sentences = []
for line in range(int(input())):
    List_of_sentences.append(input().strip().split())

Sample_sentence = input().split()

Final_list = []

for elements in Sample_sentence: #this for loop should be first
    var = None
    for lists in List_of_sentences: # this for loop should be second
        if elements in lists:
            #Final_list.append(lists[0])
            var = lists[0]
            break
    Final_list.append(var if var else elements)
            
print(' '.join(Final_list))
0
Epsi95 22 ene. 2021 a las 15:33

Esto es lo que he probado y funciona:

List_of_sentences = [
    ['man', 'I', 'je', 'ich'], 
    ['kheili', 'very', 'très', 'sehr'], 
    ['alaghemand', 'interested', 'intéressé', 'interessiert'], 
    ['barnamenevisi', 'programming', 'laprogrammation', 'Programmierung']
]
Sample_sentence = ['I', 'am', 'very', 'interested', 'in', 'programming']
Final_list = []

for elements in Sample_sentence:
    found = False
    for lists in List_of_sentences:
        if elements in lists:
            Final_list.append(lists[0])
            found = True
    if not found:
        Final_list.append(elements)

print(' '.join(Final_list))

El problema con su código es que siempre agregará un elemento si no se encuentra en lugar de agregarlo una vez y continuar con el siguiente elemento

1
Milan Vjestica 22 ene. 2021 a las 15:33

Puedes probar algo como esto:

for elements in Sample_sentence: # since you need to check for elements in the sample sentence in all lists, this should be the outer loop
    present = False
    for lists in List_of_sentences:
        if elements in lists:
            Final_list.append(lists[0])
            present = True
    if not present:
        Final_list.append(elements)
1
SJ11 22 ene. 2021 a las 15:38

Esto funciona para mi

for word in Sample_sentence:
    append = False
    for list in List_of_sentences:
        for translation in list:
            if (translation == word):
                Final_list.append(list[0])
                append = True
    if (not append):
        Final_list.append(word)
            
print(' '.join(Final_list))
1
Theresa Tobollik 22 ene. 2021 a las 15:38

La salida es así porque está iterando sobre cada lista y para cada lista, está iterando sobre cada elemento en la oración de muestra, por lo tanto, primero, buscará si alguno de los elementos de la oración de muestra coincide en la primera lista o no ("I" coincidirá), luego insertará el primer elemento de la lista, es decir, "hombre" en la lista final. para la segunda lista, "muy" coincidirá, por lo tanto, insertará el primer elemento de la segunda lista, es decir, "kheili" en la lista final. Por lo tanto, la lista final sería como: ["hombre", "kheili" ....], que es lo que tienes. Esto explica el problema que está encontrando.

0
chetan sinha 22 ene. 2021 a las 15:32
65847866