📜  Python|列表理解与 *运算符

📅  最后修改于: 2022-05-13 01:55:15.964000             🧑  作者: Mango

Python|列表理解与 *运算符

* Python 3.x 中的运算符和 range() 有很多用途。其中之一是初始化列表。

代码:在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]

在这里,唯一的区别是星号运算符在列表之外使用。并且 range() 在里面使用。这两个也可以与列表或多维列表中的列表一起使用。

代码:使用 * 操作和 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]]

真正的故障在于多维列表。在处理多维列表时,初始化方法很重要。 *运算符和列表推导两种方法的行为不同。

代码:多维列表

# 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]]