número de línea de partido de un array 1d con el primer elemento de un array 2d para el conjunto de datos grande en Python
Tengo dos listas grandes, aquí voy a mostrar un ejemplo para simplificar.
In lista1 Tengo algunas palabras,
list1 = ['hello','stack','overflow']
dentro lista2 Tengo el número de línea de las palabras de la lista1, y un valor numérico para identificar el tipo de palabra.
list2= [['0','10'],['2', '11'],['4', '12']]
Me gustaría utilizar el número de línea de la lista2
list2 = [['0','10'],['2', '11'],['4', '12']] #line numbers here are: 0,2,4
con la línea correspondiente en la lista1,
list1 = ['hello','stack','overflow'] #correspondences found here are: hello (for list2[0]) and overflow (for list2[1])
para que pueda tener una lista3 con palabra y su etiqueta.
list3 = [['hello','10'], ['overflow', '11']]
Encontré una manera de cruzar ambas listas pero es muy lento y creo que no es eficiente en absoluto. ¿Cómo puedo simplificar este proceso de búsqueda?
list1 = ['hello','stack','overflow']
list2= [['0','10'],['2', '11'],['4', '12']]
for i in range(0, len(list1)):
for k in range(0, len(list2)):
if (str(list2[k][0]) == str(i)):
print("Found "+str(list1[i]))
Encontré hola. Encontrado desbordamiento
Pregunta hecha hace 3 años, 5 meses, 6 días - Por devdynamo
3 Respuestas:
-
IIUC, usted podría hacer:
list1 = ['hello', 'stack', 'overflow'] list2 = [['0', '10'], ['2', '11'], ['4', '12']] # transform the line numbers to ints line_numbers = [(int(l), e) for l, e in list2] # filter and compound with other number res = [[list1[ln], other] for ln, other in line_numbers if ln < len(list1)] print(res)
Producto
[['hello', '10'], ['overflow', '11']]
Respondida el Dec 16, 2020 a las 21:53 - por techmaestro
Votos positivos: 0 | Votos negativos: 0 -
Para simplificar el proceso de búsqueda, puedes utilizar un enfoque más eficiente utilizando diccionarios en lugar de bucles anidados. Puedes crear un diccionario que mapee los índices de la lista1 con sus correspondientes etiquetas de la lista2, y luego utilizar este diccionario para crear la lista3. Aquí tienes un ejemplo de cómo puedes hacerlo:
python list1 = ['hello','stack','overflow'] list2 = [['0','10'],['2', '11'],['4', '12']]
Crear un diccionario que mapee los índices de list1 con las etiquetas de list2
index_label_map = {int(pair[0]): pair[1] for pair in list2}Crear la lista3 con las palabras y sus etiquetas correspondientes
list3 = [[list1[index], index_label_map[index]] for index in sorted(index_label_map.keys())] print(list3)Con este código, evitas los bucles anidados y logras la misma funcionalidad de manera más eficiente.
Respondida el Dec 17, 2020 a las 21:56 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Aquí tienes una forma más eficiente de hacer coincidir los elementos de
list1
ylist2
en Python:python list1 = ['hello', 'stack', 'overflow'] list2 = [['0', '10'], ['2', '11'], ['4', '12']] result = []
Crea un diccionario para almacenar los números de línea y las etiquetas.
line_numbers = {} for line_number, label in list2: line_numbers[int(line_number)] = labelItera sobre cada elemento de list1.
for i, word in enumerate(list1):Si el número de línea existe en el diccionario, añade la palabra y la etiqueta a result.
if i in line_numbers: result.append([word, line_numbers[i]]) print(result)Salida:
[['hello', '10'], ['overflow', '11']]
Explicación:
Creamos un diccionario
line_numbers
que mapea los números de línea a sus etiquetas correspondientes. Iteramos sobre cada elemento delist1
. Para cada elemento, comprobamos si su índice está en el diccionarioline_numbers
. Si es así, añadimos la palabra y la etiqueta correspondiente a la listaresult
.Esta solución es eficiente porque utiliza un diccionario para almacenar la información de coincidencia, lo que permite una búsqueda rápida por número de línea.
Respondida el Dec 17, 2020 a las 22:00 - por Gemini
Votos positivos: 0 | Votos negativos: 0