按字母顺序排列新列表

2024-04-28 09:31:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python指令是:编写一个名为merge的函数 获取两个按字母顺序排列的字符串列表。 函数应该返回一个包含所有字符串的列表 按字母顺序排列。 函数应该返回一个列表,其中包含所有按字母顺序排列的字符串 订购。
例如,如果函数被赋予两个列表

[“cat”, “dog”, “pat”]和{}

它应该返回列表

[“bat”, “cat”, “dog “, hamster”, “pat”, “piglet”, “worm”].

粗略地说,您将从一个空列表开始保存合并的列表 在每个列表的开头设置一个索引为0。 比较第一个单词。以字母顺序先到者为准 顺序被附加到合并列表和该列表的索引 增加了。继续,直到其中一个列表为空并复制 将其他列表的其余部分添加到合并列表中。在

现在我有密码了

^{pr2}$

它是有效的,但它不遵循指令。我真的不太确定如何比较两个列表,然后将它们添加到新列表中。我也没有在索引设置为0的情况下这样做。有人能帮我修改一下我的代码吗?在


Tags: 函数字符串列表顺序字母指令mergecat
3条回答

让我们从编写一个比较函数开始

def cmp_lists(L1,L2):
    '''returns the first item of the lesser list and the remaining lists'''
    if L1 < L2:
       return L1[0],(L1[1:],L2)
    return L2[0],(L1,L2[1:])

现在编写一个合并两个列表的方法

^{pr2}$

是合并排序?哦,那不难。只要把这两张单子倒过来,比较一下每一对,然后找出输家。一旦其中一个列表为空,剩余的列表将按升序排序,并与整个结果进行比较,因此只需将其连接起来。在

from operator import itemgetter as iget

def merge(lst1, lst2):
    lst1, lst2 = lst1[::-1], lst2[::-1]
    # popping from the end is MASSIVELY better than popping from the front
    result = []
    while True:
        if not all([lst1, lst2]): # one list is empty:
            return result + lst1[::-1] + lst2[::-1] # so add them both and return
        lst_to_pop_from = min(lst1,lst2, key=iget(-1))
        # gets the list with the smallest final element
        result.append(lst_to_pop_from.pop())

^{pr2}$

您得到的指示是为一个简单的merge函数编写一个实现,该函数通常用于merge-sort排序算法中。在

由于这两个列表都已排序,因此不需要再次联接和排序。相反,只需循环直到其中一个列表为空,并继续比较两个列表的第一个元素。弹出较短的元素并添加到较新的列表中。在

一直这样做,直到一个或两个列表变空。如果其中一个列表还有其他元素,请将它们全部添加到新列表中。在

我鼓励您再次编写代码。在

相关问题 更多 >