Python 从字符串中删除重复的行
我对Python不太熟悉。但是,我想删除字符串行中的重复项 例: 列表是一个排序的列表Python 从字符串中删除重复的行,python,Python,我对Python不太熟悉。但是,我想删除字符串行中的重复项 例: 列表是一个排序的列表 str = "aaa abb ccc" 我有数百万条这样的线路。我知道删除重复项有很长的路要走,但我想知道是否有任何可能的简短形式。如果列表已排序,您不需要设置,因为所有重复项都将分组在一起。只需跟踪最后一个元素 prevLine = NIL for line in lines if line != prevLine: # output line prevLine
str = "aaa
abb
ccc"
我有数百万条这样的线路。我知道删除重复项有很长的路要走,但我想知道是否有任何可能的简短形式。如果列表已排序,您不需要设置,因为所有重复项都将分组在一起。只需跟踪最后一个元素
prevLine = NIL
for line in lines
if line != prevLine:
# output line
prevLine = line
(我的python已经生锈了,不要相信这里的语法。我会检查它)
str
作为变量名,因为它是内置类型''''.'''
包装多行字符串排序
,设置
,拆分
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