我的Python字典没有正确更新。

huangapple go评论108阅读模式
英文:

My python dictionary is not updating properly

问题

I'm here to provide translations, but it seems like you've included a large portion of code and explanations. Please specify which parts of the text you would like me to translate for you, and I'll be happy to assist.

英文:

I am working on a project where I want to capture some data from different types of sorting algorithms and I planned on doing this by saving all the data into a dictionary and then converting that dictionary into a pandas data frame and eventually exporting it as a csv file.

The problem now is that I am updating my dictionary inside 4 for loops but it seems that for some reason the updating is being overwritten somewhere in my code at first I thought it was the global keyword that I was using to keep track of data comparison and data swap count but I am not sure I tried my best to look for moments that interfere with my global variable but I can't find anything can you please help?

My code looks something like this:

  1. def merge_sort(array):
  2. #apparently merge sort only has data assignment without no swaps and will create a new array so we can exclude data swap count
  3. if len(array) <= 1:
  4. return
  5. mid = len(array) // 2
  6. left = array[:mid].copy()
  7. right = array[mid:].copy()
  8. merge_sort(left)
  9. merge_sort(right)
  10. x,y=merge(array, left, right)
  11. global comparison_counter,swap_counter
  12. comparison_counter+=x
  13. swap_counter+=y
  14. return comparison_counter,swap_counter
  15. def merge(array, lefthalf, righthalf):
  16. i=0
  17. j=0
  18. k=0
  19. global data_comparison_count, data_swap_count
  20. while i < len(lefthalf) and j < len(righthalf):
  21. #underneath is comparison
  22. if lefthalf[i] < righthalf[j]:#data comparison
  23. array[k]=lefthalf[i]
  24. i=i+1
  25. else:
  26. array[k]=righthalf[j]
  27. j=j+1
  28. data_comparison_count+=1
  29. k=k+1
  30. while i < len(lefthalf):
  31. array[k]=lefthalf[i]
  32. i=i+1
  33. k=k+1
  34. while j < len(righthalf):
  35. array[k]=righthalf[j]
  36. j=j+1
  37. k=k+1
  38. return data_comparison_count,data_swap_count
  39. def partition(array, start_index, end_index):
  40. global data_comparison_count, data_swap_count
  41. pivot_value = array[start_index]
  42. left_mark = start_index + 1
  43. right_mark = end_index
  44. while True:
  45. while left_mark <= right_mark and array[left_mark] <= pivot_value:#comparison
  46. data_comparison_count+=1
  47. left_mark = left_mark + 1
  48. while array[right_mark] >= pivot_value and right_mark >= left_mark:#comparison
  49. data_comparison_count+=1
  50. right_mark = right_mark - 1
  51. if right_mark < left_mark:
  52. break
  53. else:
  54. #data_swap=1
  55. temp = array[left_mark]
  56. array[left_mark] = array[right_mark]
  57. array[right_mark] = temp
  58. data_swap_count += 1
  59. #data_swap
  60. data_swap_count+=1
  61. array[start_index] = array[right_mark]
  62. array[right_mark] = pivot_value
  63. return right_mark,data_comparison_count,data_swap_count
  64. def quick_sort(array):
  65. temp1,temp2=quick_sort_helper(array, 0, len(array) - 1)
  66. return temp1,temp2
  67. def quick_sort_helper(array, start_index, end_index):
  68. global comparison_counter, swap_counter
  69. if start_index < end_index:
  70. split_point,x,y = partition(array, start_index, end_index)
  71. comparison_counter+=x
  72. swap_counter+=y
  73. quick_sort_helper(array, start_index, split_point - 1)
  74. quick_sort_helper(array, split_point + 1, end_index)
  75. return comparison_counter,swap_counter
  1. time_and_data_dictionary={"Time":12,"Data Comparisons":12,"Data Swaps":12}
  2. selection_sort_information={"selection sort":time_and_data_dictionary}
  3. bubble_sort_information={"bubble sort":time_and_data_dictionary}
  4. insertion_sort_information={"insertion sort":time_and_data_dictionary}
  5. shell_sort_information={"shell sort":time_and_data_dictionary}
  6. quick_sort_information={"quick sort":time_and_data_dictionary}
  7. merge_sort_information={"merge sort":time_and_data_dictionary}
  8. array_of_sorting_algorithms=[selection_sort_information,bubble_sort_information,insertion_sort_information,shell_sort_information,quick_sort_information,merge_sort_information]
  9. dictionary={"Ascending_Sorted_250":array_of_sorting_algorithms,"Ascending_Sorted_500":array_of_sorting_algorithms,"Ascending_Sorted_1000": array_of_sorting_algorithms,"Ascending_Sorted_10000":array_of_sorting_algorithms,"Descending_Sorted_250":array_of_sorting_algorithms,"Descending_Sorted_500":array_of_sorting_algorithms," Descending_Sorted_1000": array_of_sorting_algorithms,"Descending_Sorted_10000":array_of_sorting_algorithms,"Random_Sorted_250":array_of_sorting_algorithms,"Random_Sorted_500":array_of_sorting_algorithms," Random_Sorted_1000":array_of_sorting_algorithms,"Random_Sorted_10000":array_of_sorting_algorithms}
  10. t="Time"
  11. dc="Data Comparisons"
  12. ds="Data Swaps"
  13. start = time()
  14. tuple_selection_sort_ad250 = selection_sort_array(ascending_data_250)
  15. end = time()
  16. td_selection_sort_ad250 = end - start
  17. start = time()
  18. tuple_bubble_sort_ad250 = bubble_sort_array(ascending_data_250)
  19. end = time()
  20. td_bubble_sort_ad250 = end - start
  21. start = time()
  22. tuple_insertion_sort_ad250 = insertion_sort_array(ascending_data_250)
  23. end = time()
  24. td_insertion_sort_ad250 = end - start
  25. start = time()
  26. tuple_shell_sort_ad250 = shell_sort_array(ascending_data_250)
  27. end = time()
  28. td_shell_sort_ad250 = end - start
  29. data_comparison_count = 0
  30. data_swap_count = 0
  31. comparison_counter = 0
  32. swap_counter = 0
  33. start = time()
  34. tuple_merge_sort_ad250 = merge_sort(ascending_data_250)
  35. end = time()
  36. td_merge_sort_ad250 = end - start
  37. data_comparison_count = 0
  38. data_swap_count = 0
  39. comparison_counter = 0
  40. swap_counter = 0
  41. start = time()
  42. tuple_quick_sort_ad250 = quick_sort(ascending_data_250)
  43. end = time()
  44. td_quick_sort_ad250 = end - start
  45. start = time()
  46. tuple_selection_sort_ad500 = selection_sort_array(ascending_data_500)
  47. end = time()
  48. td_selection_sort_ad500 = end - start
  49. start = time()
  50. tuple_bubble_sort_ad500 = bubble_sort_array(ascending_data_500)
  51. end = time()
  52. td_bubble_sort_ad500 = end - start
  53. start = time()
  54. tuple_insertion_sort_ad500 = insertion_sort_array(ascending_data_500)
  55. end = time()
  56. td_insertion_sort_ad500 = end - start
  57. start = time()
  58. tuple_shell_sort_ad500 = shell_sort_array(ascending_data_500)
  59. end = time()
  60. td_shell_sort_ad500 = end - start
  61. data_comparison_count = 0
  62. data_swap_count = 0
  63. comparison_counter = 0
  64. swap_counter = 0
  65. start = time()
  66. tuple_merge_sort_ad500 = merge_sort(ascending_data_500)
  67. end = time()
  68. td_merge_sort_ad500 = end - start
  69. data_comparison_count = 0
  70. data_swap_count = 0
  71. comparison_counter = 0
  72. swap_counter = 0
  73. start = time()
  74. tuple_quick_sort_ad500 = quick_sort(ascending_data_500)
  75. end = time()
  76. td_quick_sort_ad500 = end - start
  77. start = time()
  78. tuple_selection_sort_dd250 = selection_sort_array(descending_data_250)
  79. end = time()
  80. td_selection_sort_dd250 = end - start
  81. start = time()
  82. tuple_bubble_sort_dd250 = bubble_sort_array(descending_data_250)
  83. end = time()
  84. td_bubble_sort_dd250 = end - start
  85. start = time()
  86. tuple_insertion_sort_dd250 = insertion_sort_array(descending_data_250)
  87. end = time()
  88. td_insertion_sort_dd250 = end - start
  89. start = time()
  90. tuple_shell_sort_dd250 = shell_sort_array(descending_data_250)
  91. end = time()
  92. td_shell_sort_dd250 = end - start
  93. for i,j in dictionary.items():
  94. for x,val in enumerate(j):
  95. for k,v in val.items():
  96. for y,z in v.items():
  97. if i=="Ascending_Sorted_250":
  98. if x==0:
  99. dictionary[i][x][k][t]=td_selection_sort_ad250
  100. print(td_selection_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  101. dictionary[i][x][k][dc]=tuple_selection_sort_ad250[0]
  102. print(tuple_selection_sort_ad250[0], "???????????????????????")
  103. dictionary[i][x][k][ds]=tuple_selection_sort_ad250[1]
  104. print(tuple_selection_sort_ad250[1], "////////////////////")
  105. if x==1:
  106. print("is",k,x)
  107. print(i, x, k, t, dc, ds, type(i), type(x), type(k), type(t), type(dc), type(ds))
  108. dictionary[i][x][k][t] = td_bubble_sort_ad250
  109. print(td_bubble_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  110. dictionary[i][x][k][dc] = tuple_bubble_sort_ad250[0]
  111. dictionary[i][x][k][ds] = tuple_bubble_sort_ad250[1]
  112. if x==2:
  113. print("going",k,x)
  114. print(i, x, k, t, dc, ds, type(i), type(x), type(k), type(t), type(dc), type(ds))
  115. dictionary[i][x][k][t] = td_insertion_sort_ad250
  116. dictionary[i][x][k][dc] = tuple_insertion_sort_ad250[0]
  117. dictionary[i][x][k][ds] = tuple_insertion_sort_ad250[1]
  118. if x==3:
  119. print("on",k,x)
  120. print(i, x, k, t, dc, ds, type(i), type(x), type(k), type(t), type(dc), type(ds))
  121. dictionary[i][x][k][t] = td_shell_sort_ad250
  122. dictionary[i][x][k][dc] = tuple_shell_sort_ad250[0]
  123. dictionary[i][x][k][ds] = tuple_shell_sort_ad250[1]
  124. if x==4:
  125. print("here",k,x)
  126. print(i, x, k, t, dc, ds, type(i), type(x), type(k), type(t), type(dc), type(ds))
  127. dictionary[i][x][k][t] = td_merge_sort_ad250
  128. dictionary[i][x][k][dc] = tuple_merge_sort_ad250[0]
  129. dictionary[i][x][k][ds] = tuple_merge_sort_ad250[1]
  130. if x==5:
  131. print("now",k,x)
  132. print(i, x, k, t, dc, ds, type(i), type(x), type(k), type(t), type(dc), type(ds))
  133. dictionary[i][x][k][t] = td_quick_sort_ad250
  134. dictionary[i][x][k][dc] = tuple_quick_sort_ad250[0]
  135. dictionary[i][x][k][ds] = tuple_quick_sort_ad250[1]
  136. if i=="Ascending_Sorted_500":
  137. if x == 0:
  138. dictionary[i][x][k][t] = td_selection_sort_ad500
  139. print(td_selection_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  140. dictionary[i][x][k][dc] = tuple_selection_sort_ad500[0]
  141. print(tuple_selection_sort_ad250[0], "???????????????????????")
  142. dictionary[i][x][k][ds] = tuple_selection_sort_ad500[1]
  143. print(tuple_selection_sort_ad250[1], "////////////////////")
  144. if x == 1:
  145. dictionary[i][x][k][t] = td_bubble_sort_ad500
  146. print(td_bubble_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  147. dictionary[i][x][k][dc] = tuple_bubble_sort_ad500[0]
  148. print(tuple_bubble_sort_ad250[0], "???????????????????????")
  149. dictionary[i][x][k][ds] = tuple_bubble_sort_ad500[1]
  150. print(tuple_bubble_sort_ad250[1], "////////////////////")
  151. if x == 2:
  152. dictionary[i][x][k][t] = td_insertion_sort_ad500
  153. print(td_insertion_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  154. dictionary[i][x][k][dc] = tuple_insertion_sort_ad500[0]
  155. print(tuple_insertion_sort_ad250[0], "???????????????????????")
  156. dictionary[i][x][k][ds] = tuple_insertion_sort_ad500[1]
  157. print(tuple_insertion_sort_ad250[1], "////////////////////")
  158. if x == 3:
  159. dictionary[i][x][k][t] = td_shell_sort_ad500
  160. print(td_shell_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  161. dictionary[i][x][k][dc] = tuple_shell_sort_ad500[0]
  162. print(tuple_shell_sort_ad250[0], "???????????????????????")
  163. dictionary[i][x][k][ds] = tuple_shell_sort_ad500[1]
  164. print(tuple_shell_sort_ad250[1], "////////////////////")
  165. if x == 4:
  166. dictionary[i][x][k][t] = td_merge_sort_ad500
  167. print(td_merge_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  168. dictionary[i][x][k][dc] = tuple_merge_sort_ad500[0]
  169. print(tuple_merge_sort_ad250[0], "???????????????????????")
  170. dictionary[i][x][k][ds] = tuple_merge_sort_ad500[1]
  171. print(tuple_merge_sort_ad250[1], "////////////////////")
  172. if x == 5:
  173. dictionary[i][x][k][t] = td_quick_sort_ad500
  174. print(td_quick_sort_ad250,"!!!!!!!!!!!!!!!!!!!!!!")
  175. dictionary[i][x][k][dc] = tuple_quick_sort_ad500[0]
  176. print(tuple_quick_sort_ad250[0], "???????????????????????")
  177. dictionary[i][x][k][ds] = tuple_quick_sort_ad500[1]
  178. print(tuple_quick_sort_ad250[1], "////////////////////")
  179. print(dictionary,"$$$$$$$$$$$$$$")

I tried initializing the variables every time I called the merge_sort and quick_sort functions, since I thought it was a problem with the globalization of my variables, I thought this would fix it, but this was far from the truth. I also tried to debug it using different statements but the output of my debug and the output for my dictionary was very different.
Here is a snippet of what my console(output) looks like:

我的Python字典没有正确更新。

我的Python字典没有正确更新。

答案1

得分: 1

以下是您提供的代码部分的翻译:

  1. 主要要关注的是将这些仪器化排序方法实现在一个封装内,以便跟踪每个递增的计数器。仍然存在这些计数器的一种全局版本,但它们被包含在内。
  2. 以下是一个排序方法的示例,带有一些数据集。我将留下适当的计数器增加给您,但我保留了您已经有的一些。
  3. ```python
  4. from time import time
  5. def build_merge_sorter():
  6. ## ---------------------
  7. ## 保持操作的整洁跟踪
  8. ## ---------------------
  9. data_comparison_count = 0
  10. data_swap_count = 0
  11. comparison_counter = 0
  12. swap_counter = 0
  13. ## ---------------------
  14. def helper(array, lefthalf, righthalf):
  15. ## ---------------------
  16. ## 让这个方法知道这些变量来自其他地方
  17. ## ---------------------
  18. nonlocal data_comparison_count
  19. nonlocal data_swap_count
  20. nonlocal comparison_counter
  21. nonlocal swap_counter
  22. ## ---------------------
  23. i = 0
  24. j = 0
  25. k = 0
  26. while i < len(lefthalf) and j < len(righthalf):
  27. ## ---------------------
  28. ## 这是+1还是+3?
  29. ## ---------------------
  30. data_comparison_count += 1
  31. ## ---------------------
  32. if lefthalf[i] < righthalf[j]:
  33. array[k] = lefthalf[i]
  34. i += 1
  35. else:
  36. array[k] = righthalf[j]
  37. j += 1
  38. k += 1
  39. while i < len(lefthalf):
  40. array[k] = lefthalf[i]
  41. i += 1
  42. k += 1
  43. while j < len(righthalf):
  44. array[k] = righthalf[j]
  45. j += 1
  46. k += 1
  47. def sorter(array):
  48. ## ---------------------
  49. ## 让这个方法知道这些变量来自其他地方
  50. ## ---------------------
  51. nonlocal data_comparison_count
  52. nonlocal data_swap_count
  53. nonlocal comparison_counter
  54. nonlocal swap_counter
  55. ## ---------------------
  56. ## ---------------------
  57. ## 初始化这次排序的计数器
  58. ## ---------------------
  59. data_comparison_count = 0
  60. data_swap_count = 0
  61. comparison_counter = 0
  62. swap_counter = 0
  63. ## ---------------------
  64. ## ---------------------
  65. ## 一个只有1个元素的数组已经排序好了
  66. ## ---------------------
  67. comparison_counter += 1
  68. if len(array) <= 1:
  69. return (
  70. array,
  71. comparison_counter,
  72. swap_counter,
  73. data_comparison_count,
  74. data_swap_count
  75. )
  76. ## ---------------------
  77. ## ---------------------
  78. ## 这些操作应该有成本吗?
  79. ## ---------------------
  80. mid = len(array) // 2
  81. left = array[:mid]
  82. right = array[mid:]
  83. ## ---------------------
  84. ## ---------------------
  85. ## 对每一半应用排序,以便我们可以丢弃结果
  86. ## ---------------------
  87. sorter(left)
  88. sorter(right)
  89. ## ---------------------
  90. ## ---------------------
  91. ## 应用辅助函数来重新排列数据点
  92. ## ---------------------
  93. helper(array, left, right)
  94. ## ---------------------
  95. return (
  96. array,
  97. comparison_counter,
  98. swap_counter,
  99. data_comparison_count,
  100. data_swap_count
  101. )
  102. return sorter
  103. SORTERS = {
  104. "Merge Sort": build_merge_sorter()
  105. }
  106. DATASETS = {
  107. "Ascending 250": list(range(250)),
  108. "Decending 250": list(reversed(range(250)))
  109. }
  110. ## ---------------------
  111. ## 运行测试
  112. ## ---------------------
  113. test_results = {}
  114. for method_name, method in SORTERS.items():
  115. for dataset_name, dataset in DATASETS.items():
  116. dataset = dataset[:]
  117. start = time()
  118. (
  119. sorted_dataset,
  120. comparison_counter,
  121. swap_counter,
  122. data_comparison_count,
  123. data_swap_count
  124. ) = method(dataset)
  125. end = time()
  126. test_results.setdefault(method_name, {})[dataset_name] = {
  127. "time": end - start,
  128. "comparisons": comparison_counter,
  129. "swaps": swap_counter,
  130. "data_comparisons": data_comparison_count,
  131. "data_swaps": data_swap_count,
  132. }
  133. ## ---------------------
  134. import json
  135. print(json.dumps(test_results, indent=4))

这将产生类似以下的输出:

  1. {
  2. "Merge Sort": {
  3. "Ascending 250": {
  4. "time": 0.000995635986328125,
  5. "comparisons": 1,
  6. "swaps": 0,
  7. "data_comparisons": 249,
  8. "data_swaps": 0
  9. },
  10. "Decending 250": {
  11. "time": 0.0,
  12. "comparisons": 1,
  13. "swaps": 0,
  14. "data_comparisons": 251,
  15. "data_swaps": 0
  16. }
  17. }
  18. }
  19. }
英文:

The main thing I would look at would be to implement these instrumented sorting methods inside an enclosure so that you can track each incremented counter. There is still a kind of global version of these counters, but they are contained.

Here is an example of one sort method with a couple of data sets. I will leave the proper counter incrementing to you but I kept the couple you had in already.

  1. from time import time
  2. def build_merge_sorter():
  3. ## ---------------------
  4. ## keeping tidy track of operations
  5. ## ---------------------
  6. data_comparison_count = 0
  7. data_swap_count = 0
  8. comparison_counter = 0
  9. swap_counter = 0
  10. ## ---------------------
  11. def helper(array, lefthalf, righthalf):
  12. ## ---------------------
  13. ## Let this method know that these variables come from someplace else
  14. ## ---------------------
  15. nonlocal data_comparison_count
  16. nonlocal data_swap_count
  17. nonlocal comparison_counter
  18. nonlocal swap_counter
  19. ## ---------------------
  20. i=0
  21. j=0
  22. k=0
  23. while i &lt; len(lefthalf) and j &lt; len(righthalf):
  24. ## ---------------------
  25. ## Is this +1 or +3?
  26. ## ---------------------
  27. data_comparison_count += 1
  28. ## ---------------------
  29. if lefthalf[i] &lt; righthalf[j]:
  30. array[k]=lefthalf[i]
  31. i += 1
  32. else:
  33. array[k]=righthalf[j]
  34. j += 1
  35. k += 1
  36. while i &lt; len(lefthalf):
  37. array[k] = lefthalf[i]
  38. i += 1
  39. k += 1
  40. while j &lt; len(righthalf):
  41. array[k] = righthalf[j]
  42. j += 1
  43. k += 1
  44. def sorter(array):
  45. ## ---------------------
  46. ## Let this method know that these variables come from someplace else
  47. ## ---------------------
  48. nonlocal data_comparison_count
  49. nonlocal data_swap_count
  50. nonlocal comparison_counter
  51. nonlocal swap_counter
  52. ## ---------------------
  53. ## ---------------------
  54. ## initialize the counters for this sort
  55. ## ---------------------
  56. data_comparison_count = 0
  57. data_swap_count = 0
  58. comparison_counter = 0
  59. swap_counter = 0
  60. ## ---------------------
  61. ## ---------------------
  62. ## an array of 1 element is already sorted
  63. ## ---------------------
  64. comparison_counter += 1
  65. if len(array) &lt;= 1:
  66. return (
  67. array,
  68. comparison_counter,
  69. swap_counter,
  70. data_comparison_count,
  71. data_swap_count
  72. )
  73. ## ---------------------
  74. ## ---------------------
  75. ## Should these opperations have costs?
  76. ## ---------------------
  77. mid = len(array) // 2
  78. left = array[:mid]
  79. right = array[mid:]
  80. ## ---------------------
  81. ## ---------------------
  82. ## apply the sort to each half in-place so we can discard the result
  83. ## ---------------------
  84. sorter(left)
  85. sorter(right)
  86. ## ---------------------
  87. ## ---------------------
  88. ## Apply the help to shuffle data points about
  89. ## ---------------------
  90. helper(array, left, right)
  91. ## ---------------------
  92. return (
  93. array,
  94. comparison_counter,
  95. swap_counter,
  96. data_comparison_count,
  97. data_swap_count
  98. )
  99. return sorter
  100. SORTERS = {
  101. &quot;Merge Sort&quot;: build_merge_sorter()
  102. }
  103. DATASETS = {
  104. &quot;Ascending 250&quot;: list(range(250)),
  105. &quot;Decending 250&quot;: list(reversed(range(250)))
  106. }
  107. ## ---------------------
  108. ## Run tests
  109. ## ---------------------
  110. test_results = {}
  111. for method_name, method in SORTERS.items():
  112. for dataset_name, dataset in DATASETS.items():
  113. dataset = dataset[:]
  114. start = time()
  115. (
  116. sorted_dataset,
  117. comparison_counter,
  118. swap_counter,
  119. data_comparison_count,
  120. data_swap_count
  121. ) = method(dataset)
  122. end = time()
  123. test_results.setdefault(method_name, {})[dataset_name] = {
  124. &quot;time&quot;: end - start,
  125. &quot;comparisons&quot;: comparison_counter,
  126. &quot;swaps&quot;: swap_counter,
  127. &quot;data_comparisons&quot;: data_comparison_count,
  128. &quot;data_swaps&quot;: data_swap_count,
  129. }
  130. ## ---------------------
  131. import json
  132. print(json.dumps(test_results, indent=4))

That is going to result in something like:

  1. {
  2. &quot;Merge Sort&quot;: {
  3. &quot;Ascending 250&quot;: {
  4. &quot;time&quot;: 0.000995635986328125,
  5. &quot;comparisons&quot;: 1,
  6. &quot;swaps&quot;: 0,
  7. &quot;data_comparisons&quot;: 249,
  8. &quot;data_swaps&quot;: 0
  9. },
  10. &quot;Decending 250&quot;: {
  11. &quot;time&quot;: 0.0,
  12. &quot;comparisons&quot;: 1,
  13. &quot;swaps&quot;: 0,
  14. &quot;data_comparisons&quot;: 251,
  15. &quot;data_swaps&quot;: 0
  16. }
  17. }
  18. }

huangapple
  • 本文由 发表于 2023年3月7日 21:33:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/75662649.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定