Python | Comprobar si dos listas son circularmente idénticas

Dadas dos listas, comprueba si son circularmente idénticas o no. Check whether two lists are circularly identical 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")
Producción:

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")
Producción:

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")
Producción:

Yes
No

Publicación traducida automáticamente

Artículo escrito por Striver y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *