【问题标题】:Python sorted list insertionPython 排序列表插入
【发布时间】:2021-05-02 13:21:27
【问题描述】:

我需要在 python 中进行练习的帮助,我必须填写预先存在的代码。

该函数接受一个整数和一个排序列表,它插入值a,然后返回新列表,我必须用正确答案替换点

看起来像这样:

def insert(a, tab):
    l = list(tab)
    l.append(a)
    i = ...
    while a < ... :
        l[i+1] = ...
        l[i] = a
        i = ...
    return l

>>> insert(3,[1,2,4,5])
[1, 2, 3, 4, 5]

感谢您的帮助。

【问题讨论】:

  • 你的问题到底是什么?
  • 到目前为止你尝试了什么?
  • 看起来你应该做一些类似于冒泡排序的事情——交换索引ii+1处的元素位置,并从右到左继续这样做,直到插入的元素进入正确的位置。考虑到这个想法,试着自己解决它。
  • 感觉代码结构和变量名是想糊弄人……(或者写的不好!)

标签: python list sorting insertion


【解决方案1】:
def insert(a, tab):
    l = list(tab)
    l.append(a)
    i = len(l) - 2
    while a < l[i] and i >= 0:
        l[i+1] = l[i]
        l[i] = a
        i -= 1
    return l

【讨论】:

  • 据我所知,如果必须在列表开头插入元素,这将崩溃。但是,在循环条件中检查 i 以避免该问题似乎不适用于原始代码。
  • 好收获。更新修复
  • 很好的修复。对于任何想知道的人,通过在a &lt; l[i] 之后添加i&gt;=0l[-1] 将在最后一次迭代中被访问。在 Python 中这不是问题,但在其他语言中可能会导致错误。 i&gt;=0 应该首先检查,但提供的代码模板不允许这样做。这可能是一个疏忽。
【解决方案2】:

免责声明 - 这里没有什么新鲜事。仅供参考,使变量更具描述性并简化代码。 (供将来阅读,或我自己

def insert(x, lst):
    ''' lst is a sorted list'''
    ''' bubble sort - '''
    
    lst.append(x)   # to the end
    
    i = len(lst) - 2
    
    while i >=0 and lst[i] > x:
        lst[i+1], lst[i] = lst[i], x
        i -= 1
    return lst
  

insert(3,[1,2,4,5])
[1, 2, 3, 4, 5]

【讨论】:

  • 更好更干净!
【解决方案3】:

很简单,我们甚至可以只替换... 之一:

def insert(a, tab):
    l = list(tab)
    l.append(a)
    i = ...
    while a < (l.sort() or a) :
        l[i+1] = ...
        l[i] = a
        i = ...
    return l

测试它:

>>> insert(3,[1,2,4,5])
[1, 2, 3, 4, 5]

【讨论】:

    【解决方案4】:

    从上面的答案中获得灵感,我会说一些也复制列表而不是覆盖它的东西,如下所示

    def insert_and_sort(a, tab):
        newtab = list(tab)
        newtab.append(a)
        sort(newtab)
        return newtab
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多