Dadas dos listas, comprueba si son circularmente idénticas o no. Ejemplos:
Input : list1 = [10, 10, 0, 0, 10] list2 = [10, 10, 10, 0, 0] Output : Yes Explanation: yes they are circularly identical as when we write the list1 last index to second last index, then we find it is circularly same with list1 Input : list1 = [10, 10, 10, 0, 0] list2 = [1, 10, 10, 0, 0] Output :No
Método 1: Uso de List Traversal
Usando transversal , tenemos que duplicar la lista dada. Verifique cualquier x (0 <= n) a cualquier x + n y compare con list2 para ver si list1 y list2 son iguales, si ambos son iguales, list2 es circularmente idéntico. Usando dos bucles, verifique esta propiedad. El primer ciclo se ejecutará de 0 a len (lista1) y luego verificará si el índice (x a x + n) es el mismo que lista2, si es así, devolverá verdadero, de lo contrario devolverá falso. A continuación se muestra la implementación de Python del enfoque anterior:
Python3
# python program to check if two # lists are circularly identical # using traversal # function to check circularly identical or not def circularly_identical(list1, list2): # doubling list list3 = list1 * 2 # traversal in twice of list1 for x in range(0, len(list1)): z = 0 # check if list2 == list1 circularly for y in range(x, x + len(list1)): if list2[z]== list3[y]: z+= 1 else: break # if all n elements are same circularly if z == len(list1): return True return False # driver code list1 = [10, 10, 0, 0, 10] list2 = [10, 10, 10, 0, 0] list3 = [1, 10, 10, 0, 0] # check for list 1 and list 2 if(circularly_identical(list1, list2)): print("Yes") else: print("No") # check for list 2 and list 3 if(circularly_identical(list2, list3)): print ("Yes") else: print ("No")
Yes No
Método 2: Usar el corte de lista
Python3
# python program to check if two # lists are circularly identical # using traversal # function to check circularly identical or not def circularly_identical(list1, list2): # doubling list list1.extend(list1) # traversal in twice of list1 for i in range(len(list1)): # check if sliced list1 is equal to list2 if list2 == list1[i: i + len(list2)]: return True return False # driver code list1 = [10, 10, 0, 0, 10] list2 = [10, 10, 10, 0, 0] list3 = [1, 10, 10, 0, 0] # check for list 1 and list 2 if(circularly_identical(list1, list2)): print("Yes") else: print("No") # check for list 2 and list 3 if(circularly_identical(list2, list3)): print ("Yes") else: print ("No")
Yes No
Método 3: Usar la función map()
Usando la función map() incorporada de Python podemos hacer esto en un solo paso, donde tenemos que mapear list2 en una string y luego ver si existe en el mapeo de dos veces de list1 (2*list1) en otra string. A continuación se muestra la implementación de Python del enfoque anterior:
Python3
# python program to check if two # lists are circularly identical # using map function # function to check circularly identical or not def circularly_identical(list1, list2): return(' '.join(map(str, list2)) in ' '.join(map(str, list1 * 2))) # driver code list1 = [10, 10, 0, 0, 10] list2 = [10, 10, 10, 0, 0] list3 = [1, 10, 10, 0, 0] # check for list 1 and list 2 if (circularly_identical(list1, list2)): print("Yes") else: print("No") # check for list 2 and list 3 if(circularly_identical(list2, list3)): print ("Yes") else: print ("No")
Yes No