Python 从字符串中删除重复的行

Python 从字符串中删除重复的行,python,Python,我对Python不太熟悉。但是,我想删除字符串行中的重复项 例: 列表是一个排序的列表 str = "aaa abb ccc" 我有数百万条这样的线路。我知道删除重复项有很长的路要走,但我想知道是否有任何可能的简短形式。如果列表已排序,您不需要设置,因为所有重复项都将分组在一起。只需跟踪最后一个元素 prevLine = NIL for line in lines if line != prevLine: # output line prevLine

我对Python不太熟悉。但是,我想删除字符串行中的重复项

例:

列表是一个排序的列表

str = "aaa
       abb
       ccc"

我有数百万条这样的线路。我知道删除重复项有很长的路要走,但我想知道是否有任何可能的简短形式。

如果列表已排序,您不需要设置,因为所有重复项都将分组在一起。只需跟踪最后一个元素

prevLine = NIL
for line in lines
  if line != prevLine:
    # output line
  prevLine = line
(我的python已经生锈了,不要相信这里的语法。我会检查它)

  • 不要使用
    str
    作为变量名,因为它是内置类型
  • 使用
    ''''.'''
    包装多行字符串
  • 在您的案例中使用
    排序
    设置
    拆分
  • e、 g:

    感谢@user2357112提及,如果您想保留单词apear的顺序,请使用
    OrderedDict

    In [910]: ss = '''zzz #<----------
         ...:        aaa
         ...:        aaa
         ...:        aaa
         ...:        abb
         ...:        abb
         ...:        ccc'''
    
    In [911]: from collections import OrderedDict
         ...: print '\n'.join(OrderedDict.fromkeys(ss.split()))
    zzz #here zzz ranks the first
    aaa
    abb
    ccc
    
    [910]中的
    :ss=''zzz#尝试设置:

    init_str = """aaa
           aaa
           aaa
           abb
           abb
           ccc"""
    
    final_string=""
    for x in set(init_str.split()):
        final_string+=x+'\n'
    print final_string
    

    好吧,基本上这就是你想要的:

    "\n".join(set(s.split('\n')))
    
    但是,您的字符串不是有效的python字符串,因此您可能需要执行以下操作:

    s = """aaa
           aaa
           aaa
           abb
           abb
           ccc"""
    
    但是,您可能希望去掉尾随空格:

    "\n".join(set([s.strip() for s in s.split('\n')]))
    
    注意:正如@zhangxaochen所建议的,使用python保留字作为变量名确实是个坏主意。改用类似于
    s
    的方法


    注意2:使用排序和设置是有意义的,因为看起来您正在处理与以前的数据集相同的数据集

    ,因为您的数据已经排序,我们可以利用现有的顺序来提高基于
    set
    orderedict
    的解决方案的性能。使用:

    这样可以避免不必要地建立一大组行。如果数据来自一个文件,那么一个小的调整将在数量级上超过所有基于set或orderedICT的解决方案的内存消耗:

    with open('lines.txt') as f:
        for line, group in itertools.groupby(f):
            print line,
    

    我知道您正在处理已排序的输入,但如果输入未排序,您需要保留输入顺序,您可以使用
    orderedict

    from collections import OrderDict
    s = r'''aaa
    aaa
    aaa
    abb
    abb
    ccc'''
    for line in OrderedDict.fromkeys(s.splitlines()):
      print line
    aaa
    abb
    ccc
    

    您是否听说过
    set
    split
    ?或者如果订单很重要,
    '\n'.join(OrderedDict.fromkeys(ss.split())
    import itertools
    lines = [key for key, group in itertools.groupby(s.split())]
    
    with open('lines.txt') as f:
        for line, group in itertools.groupby(f):
            print line,
    
    from collections import OrderDict
    s = r'''aaa
    aaa
    aaa
    abb
    abb
    ccc'''
    for line in OrderedDict.fromkeys(s.splitlines()):
      print line
    aaa
    abb
    ccc