Python | Comprensión de lista vs * operador

* operator y range() en python 3.x tiene muchos usos. Una de ellas es inicializar la lista.

Código: inicialización de la lista de listas 1D en Python

# Python code to initialize 1D-list  
  
# Initialize using star operator
# list of size 5 will be initialized.
# star is used outside the list.
list1 = [0]*5  
  
  
# Initialize using list comprehension
# list of size 5 will be initialized.
# range() is used inside list.
list2 = [0 for i in range(5)]  
  
print("list1 : ", list1)
print("list2 : ", list2)
Producción:

list1 :  [0, 0, 0, 0, 0]
list2 :  [0, 0, 0, 0, 0]

Aquí, la única diferencia es que el operador estrella se usa fuera de la lista. Y range() se usa dentro. Estos dos también se pueden usar con una lista dentro de la lista o lista multidimensional.

Código: lista dentro de la lista usando * operación y range()

# Python code to 
# initialize list within the list 
  
# Initialize using star operator
list1 = [[0]]*5  
  
# Initialize using range()
list2 = [[0] for i in range(5)]  # list of 5 "[0] list" is initialized.
  
# Both list are same so far
print("list1 : ", list1)
print("list2 : ", list2)
Producción:

list1 :  [[0], [0], [0], [0], [0]]
list2 :  [[0], [0], [0], [0], [0]]

El problema real es con la lista multidimensional. Al tratar con una lista multidimensional, el método de inicialización es muy importante. Ambos métodos * operador y comprensión de lista se comportan de manera diferente.

Código: Lista multidimensional

# Consider same previous example.
  
# Initialize using star operator.
star_list = [[0]]*5
  
# Initialize using list Comprehension.
range_list = [[0] for i in range(5)]
  
star_list[0] = 8 # Expected output will come.
range_list[0] = 8 # Expected output.
  
'''
Output:
    star_list = [8, [0], [0], [0], [0]]
    range_list = [8, [0], [0], [0], [0]]
'''
  
# Unexpected output will come.
star_list[2].append(8) 
'''
    Since star_list[2] = [0]. so it will find for all
    [0] in list and append '8' to each occurrence of
    [0]. And will not affect "non [0]" items is list.'''
      
      
range_list[2].append(8) # expected output.
  
print("Star list  : ", star_list)
print("Range list : ", range_list)
Producción:

Star list  :  [8, [0, 8], [0, 8], [0, 8], [0, 8]]
Range list :  [8, [0], [0, 8], [0], [0]]

Si alguien quiere lidiar con una array 1D, puede usar cualquier cosa. Pero con la array multidimensional, se debe usar la comprensión de listas.

Publicación traducida automáticamente

Artículo escrito por Vikku_Sharma 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 *