2017-07-31 34 views
0

我正在做这个练习,需要我连接2个已排序的列表,我不确定为什么输出是这种方式。
另外,我已经习惯了C,所以我通常会写很多“无用”的代码,只要我可以用python方法完成它。你认为如果我只是继续解决问题,那么对于我来说,以pythonic的方式思考就会很自然吗?如果有更简单的方法来解决这个问题,请告诉我。得到这个结果,我该如何解决6号? > [1,2,3,4,5,[6]]

我的代码:

def conc_sorted(list1, list2): 
    result = [] 
    i = 0 
    while True: 
     if not list1:    # checking if both lists still have anything in it 
      result.append(list2) # to avoid 'out of range' 
      break 
     elif not list2: 
      result.append(list1) 
      break 
     else:   
      result.append(compare(list1, list2)) # calls compare() and appends whatever it pops  

    print result 

def compare(list1, list2): 
    if (list1[0] < list2[0]):  
     return list1.pop(0) 
    else: 
     return list2.pop(0) 
# exemple  
list1 = [1, 4, 6] 
list2 = [2, 3, 5] 
conc_sorted(list1, list2) 

输出> [1,2,3,4,5,[6]]

+1

什么是你想要的输出?怎么样'list1.extend(list2).sort()' – albert

+0

你需要做这个很长的路还是仅仅因为你的C背景?这里有很简单的Python方法,但也许为了练习,这些方法是被禁止的。 –

+0

@albert差不多。 '.extend'在原地工作。将这两行分开。 –

回答

2

你的碱情况下,追加单个元素列表到你的结果。你需要改变.append.extend

if not list1:    
    result.extend(list2) 
    break 
elif not list2: 
    result.extend(list1) 
    break 
+0

为什么不连接和排序?因为这是O(nlogn),但你可以在O(n)*中完成,如果列表已经排序*。考虑合并排序。这是合并部分。 –

+0

我不知道.extend和.sort 有关学习方法的好方法的任何提示?这不是我不知道如何使用它,而是我不知道它们存在。我习惯于不得不像C一样手工编写所有代码。 – Tax

+0

@ juanpa.arrivillaga我没有看到他们已经分类的部分。我的错。 –

-1
sorted (list1 + list2) 

[1,2,3,4,5,6]

0

您应该使用扩展这里操作,而不是追加因为追加一次只带单个输入(实体)。 是的!我为你的问题得到了一个更简单的代码。
x=[1,4,6]

y=[2,3,5]

z=x+y

z.sort()

print z