* 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)
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)
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)
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