如何使用分而治之将列表分成左右两侧?
Posted
技术标签:
【中文标题】如何使用分而治之将列表分成左右两侧?【英文标题】:How do I separate a list into left and right sides using divide and conquer? 【发布时间】:2021-07-12 00:05:48 【问题描述】:我正在尝试不断地将列表分成左右两侧,直到无法再制作一半列表并每次打印它们。我也尝试根据偶数或奇数迭代选择左侧或右侧。
代码:
low = 0
high = n
i=0
a = len(L1)
b = len(L2)
while a > 0 and b>0:
mid = (low + high)// 2
if i%2==0:
print(L[low:mid])
low = mid + 1
print(L[mid:high])
else:
print(L[low:mid])
high = mid - 1
print(L[low:high])
print(L[mid:high])
i=i+1
L = [1, 2, 3, 4, 5]
# should print:
[1, 2, 3]
[4, 5]
[1, 2]
[3]
[4]
[5]
请帮忙
【问题讨论】:
【参考方案1】:这样做的自然方法是将分割和打印操作放在一个函数中,以便您可以在子列表上递归调用该函数,直到达到长度为 1 的列表:
def divide(L):
"""Recursively divide list L and print the sublists at each level."""
if len(L) <= 1: # base case: nothing left to do
return()
mid = (len(L) + 1) // 2 # if odd length, left sublist will be longer
L_left = L[:mid] # left sublist
L_right = L[mid:] # right sublist
print(L_left)
print(L_right)
# recursive function calls to further divide the sublists
divide(L_left)
divide(L_right)
return()
L = [1, 2, 3, 4, 5]
divide(L)
[1, 2, 3]
[4, 5]
[1, 2]
[3]
[1]
[2]
[4]
[5]
请注意,这并不能解决您的想法
根据偶数或奇数迭代选择左侧或右侧
因为我不确定你的意思。
【讨论】:
以上是关于如何使用分而治之将列表分成左右两侧?的主要内容,如果未能解决你的问题,请参考以下文章