首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定义按升序返回元组的sort_tuple

如何定义按升序返回元组的sort_tuple
EN

Stack Overflow用户
提问于 2014-03-25 10:39:35
回答 1查看 488关注 0票数 1

我需要定义一个函数'sort_tuple‘,它接受元组并返回按升序排序的元组。(我不应该在代码中使用内置函数排序或.sort )

注意:代码应该使用insert_tuple函数:

代码语言:javascript
运行
复制
def insert_tup(x, tup):
    b = search(x, tup)
    left = tup[:b]
    right = tup[ b:]
    new_tup = left + (x,) + right
    return new_tup

def search(x, seq):
    for i in seq:
        if x<i:
            return seq.index(i)
        elif x == i:
            return seq.index(i)
        elif x>seq[-1]:
            return (seq.index(seq[-1]))+1

测试结果:

代码语言:javascript
运行
复制
>>> sort_tuple((5, 0, -1, 4, -2))
(-2, -1, 0, 4, 5)

以下是我的回答:

代码语言:javascript
运行
复制
def sort_tuple(tup):
    for i in range(len(tup)):
       if tup[i-1] > tup[i]:
            removed_tup = tup[0:i-1] + tup[i: len(tup)]
            new_tup = insert_tup(tup[i-1], removed_tup)
    return new_tup

但是这个代码失败了,因为当我输入这个表达式时:

Sort_tuple(5,0,-1,4,-2)

输出应该是升序的:(-2,-1,0,4,5),但是我的输出是(4,5,0,-1,-2)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-25 12:11:15

您可能应该做一种插入排序:

代码语言:javascript
运行
复制
def sort_tuple(t):
    result = () # start with an empty result
    for val in t:
        result = insert_tup(val, result) # insert each value into its place
    return result

这并不是非常有效,但是很容易使用您所使用的函数。

虽然上面的代码非常直接,但在这种情况下,它只是侥幸地工作,因为当传递空元组时,search函数的行为很糟糕(返回None)。幸运的是,tup[:None]是一个合法的部分。在特定的情况下,它会出现,甚至是正确的!

更好的search实现将始终返回一个整数。下面是一个快速的尝试:

代码语言:javascript
运行
复制
def search(x, seq):
    for i, v in enumerate(seq):
        if x < v:
            return i
    return len(seq)

或者更好的是,使用bisect模块在O(log n)时间而不是O(n)中进行搜索。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22631987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档