【问题标题】: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] 

请帮忙

【问题讨论】:

    标签: python python-3.x divide-and-conquer


    【解决方案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]
    

    请注意,这并不能解决您的想法

    根据偶数或奇数迭代选择左侧或右侧

    因为我不确定你的意思。

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2013-03-24
      • 2014-10-20
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 2013-01-31
      • 2020-12-05
      • 2019-11-10
      相关资源
      最近更新 更多