【问题标题】:I want to create a sorted list of nom duplicated我想创建一个 nom 重复的排序列表
【发布时间】:2018-07-30 05:40:44
【问题描述】:

我需要创建一个包含数十亿个元素的排序列表,然后创建一个没有重复元素的第二个列表,其中包含第一个列表中每个元素的第一个字母以及该元素在第一个列表中的位置。

#input
"Alfa", "Bravo","Big","Bang","Charlie" 

#output
"A",1, "B",2, "C",5

【问题讨论】:

  • 家庭作业?
  • @matisetorm 嗯,我想说做家庭作业的人通常没有可以保存数十亿字符串列表的计算机。
  • 您无法合理地创建该大小的字符串列表。如果您有数十亿个元素,您将不得不使用外部存储。将它们放在一个文件中,使用基于文件的排序来按顺序获取文件,然后通读生成的排序文件以构建您的摘要列表。
  • 为什么这篇文章同时被标记为 vb6 和 python?至少应删除其中一个标签。

标签: python list linked-list vb6 sortedlist


【解决方案1】:

目前还不清楚除了生成第二个列表之外是否需要保留第一类结果,也不清楚为什么这个问题上有 VB6 和 Python 标记。

如果你认为最终结果需要一个临时数组,那你就错了!

只需遍历元素列表,最好以批处理方式(加载一些元素,然后处理,然后“卸载”/从内存中释放它们)。 从每个元素中取唯一的第一个字母。如果此字母尚未出现在您的输出数组中,则将其添加到计数 1。如果它已经在其中,则增加其计数器。

所以对于 "Alfa","Charlie", "Big", "Bravo","Bang"

您将获得: A => 1, C => 1, B => 3"

然后按键排序。 A => 1, B => 3, C => 1"

然后,重要的是,将前一个计数器添加到下一个计数器: A => 1, B => 3+1, C => 1+3+1"

然后你得到你的输出。

PS 这真的是学校/课程、作业,对吧?诀窍是找到那些优化。 ;)

【讨论】:

    【解决方案2】:
    inlist=["Alfa", "Bravo","Big","Bang","Charlie"]
    
    outlist=[]
    
    for i in inlist:
    
        alpha=i[0]
    
        if not alpha in outlist:
            outlist.append(alpha)
            outlist.append(inlist.index(i)+1)
    print(outlist)
    

    【讨论】:

      【解决方案3】:

      对于排序,Python 3.0 及更高版本已经为列表内置了 sort() 方法。 所以要得到第一个排序列表。

      input_list =["Alfa","Charlie", "Big", "Bravo","Bang"] input_list.sort()

      对于你的第二个问题,@przemo_li 的回答是最有效的一个

      【讨论】:

        猜你喜欢
        • 2021-01-14
        • 2023-03-28
        • 2014-07-26
        • 2022-09-23
        • 1970-01-01
        • 2018-09-18
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多