Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除重复项:python结果不同于sort-u_Python_List_Set_Duplicates - Fatal编程技术网

删除重复项:python结果不同于sort-u

删除重复项:python结果不同于sort-u,python,list,set,duplicates,Python,List,Set,Duplicates,我有一个很长的文本文件(2GB),我使用以下方法删除了重复文件: sort -u filename > outfile1 及 但是,两个文件outfile2和outfile1的条目数不同: wc -l outfile? 185866729 filename 109608242 outfile1 109611085 outfile2 这怎么可能 更新。 根据查看数据的请求,我发现python将删除重复项,如: låsningernes læsningernes løsning

我有一个很长的文本文件(2GB),我使用以下方法删除了重复文件:

sort -u filename > outfile1

但是,两个文件outfile2和outfile1的条目数不同:

wc -l outfile?
 185866729 filename
 109608242 outfile1
 109611085 outfile2
这怎么可能

更新。 根据查看数据的请求,我发现python将删除重复项,如:

 låsningernes
 læsningernes
 løsningernes

实际上,
排序-u
中忽略第二个字符,只保留第一个条目。相反,Python在区分这三条记录方面做得很好。

没有看到实际输出(或者至少是“额外”行,我们只能猜测)

但这将取决于
sort
完成了多少预处理,它比
set()
找到了更多的重复项

可能的原因可能是

  • 某些行上的尾随空格。它们可以通过
    sort
    删除,但不能通过
    set
    删除
  • 对unicode字符的不同处理。也许排序会将其中一些字符映射到一组较小的等价字符上,从而产生更多的重复字符

如果将它们合并并创建为一个列表,则可以执行以下操作:

non_duplicates= [a for i,a in enumerate(l) if i == l.index(a)]

这也保持了它所包含的项目的顺序

检查
diff-u outfile*
可能会让我们了解到,如果不访问输入文件,这些差异是难以想象的。简单的方法是对outfile2进行排序,并打印outfile1和outfile2之间的差异,这不可能是
wc的实际输出
@JohnGordon不确定您的意思。我添加了文件名以进行比较(就像在我的工作流中一样,它位于不同的文件夹中)我指的是输出中存在
filename
,而您只键入了
outfile?
。我将接受这个答案,因为它正确地指出这是unicode处理。
non_duplicates= [a for i,a in enumerate(l) if i == l.index(a)]