【问题标题】:Function to take a list and sort it using another function获取列表并使用另一个函数对其进行排序的函数
【发布时间】:2022-01-05 08:31:53
【问题描述】:

一个相当简单的问题,但作为一个新手,我可能会有点迷茫。

如何格式化我的函数以将列表作为函数的输入,然后使用另一个函数对所述列表进行排序? 我有一个功能代码,用于我在下面调用的 func1。

func1 (x, list1)
    Doing code to sort list1 when x is added 

func2 (list2)
    out = []
    for i in list2:
    func1(mylist[i],out)

不太确定如何定义 func2 以使其采用像 ex 这样的列表。 func2([4,2,3,1]),使用 func1,给出 [1,2,3,4]。 out 在开始时是一个空列表。 所以执行 func2 应该首先查看 list[0],将其放入 func1(4,out) --> out = [4] 下一步,它应该采用 list [1] = 2. func1(2, out) --> [4,2] --> [2,4]。 以此类推,直到所有元素都经过审查和排序。

如果有人对如何修复 func2 有很好的解释,我将不胜感激。

【问题讨论】:

  • 这里的一个问题是列表有一个内置的sort 方法,这是对它们进行排序的明显(和有效)方法。您是否正在尝试解决一个真正的问题,或者这只是为了练习?
  • 这应该指向正确的方向stackoverflow.com/questions/4979542/…
  • 练习,所以想看看我是否可以在不使用任何导入的情况下做到这一点。
  • 很公平,尽管您当然不需要任何导入来调用list2.sort() 或其他任何东西。
  • 是的,对不起。不是说进口,而是想看看我是否也可以在没有排序的情况下解决它:)

标签: python list sorting


【解决方案1】:

在 python 中处理列表时有两种方法。您可以就地修改列表,也可以构建一个新列表。

不幸的是,对于您“我想自己做所有事情”的态度,就地修改列表意味着您只能依赖列表方法,例如 .sort.insert.remove。以下是有用的列表方法列表:https://docs.python.org/3/tutorial/datastructures.html#more-on-lists

# insert element x into sorted list l in-place
def func1(x, l):
    i = 0
    while i < len(l) and l[i] < x:
        i += 1
    l.insert(i, x)

# returns a sorted copy of list l
def func2(l):
    result = []
    for x in l:
        func1(x, result)
    return result

这可能会让您失望,因为您希望避免依赖 .insert 来插入元素。

现在是第二种方法:我们将返回一个新列表,它是原始列表的副本,其中插入了新元素,而不是就地修改列表以插入一个元素。

# return a copy of sorted list l, with x inserted
def func1(x, l):
    i = 0
    while i < len(l) and l[i] < x:
        i += 1
    return l[:i] + [x] + l[i:]

# return a sorted copy of list l
def func2(l):
    result = []
    for x in l:
        result = func1(x, result)
    return result

重要提示:仔细查看func2 的两个版本。它们非常相似,但两者之间存在重要区别。因为他们依赖func1,而我们更改了func1,我们也不得不更改func2

【讨论】:

    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多