Python 类型错误:不可损坏的类型:';列表';

Python 类型错误:不可损坏的类型:';列表';,python,csv,arrays,list,Python,Csv,Arrays,List,我试图使用Python读取包含数千个电子邮件地址的CSV文件,然后创建所有重复项的列表。以下是我到目前为止的情况: import csv input_file='combined.csv' original_list=[] duplicate_list=[] def readcsv(input_file): ifile = open(combined, "rU") reader = csv.reader(ifile, delimiter=";") rownum =

我试图使用Python读取包含数千个电子邮件地址的CSV文件,然后创建所有重复项的列表。以下是我到目前为止的情况:

import csv

input_file='combined.csv'
original_list=[]
duplicate_list=[]

def readcsv(input_file):
    ifile = open(combined, "rU")
    reader = csv.reader(ifile, delimiter=";")

    rownum = 0
    for row in reader:
        original_list.append (row)
        rownum += 1

    ifile.close()
    original_list.sort()
    return original_list

(readcsv(input_file))

seen_set = set()
duplicate_set = set(x for x in original_list if x in seen_set or seen_set.add(x))
unique_set = seen_set - duplicate_set

print (duplicate_set)
print (unique_set)
而不是(即使没有
TypeError
仍然是糟糕的python,原因在注释中解释):

实际上你所需要的就是

# first just use set to grab all the possible elements (make lists hashable by
# passing through tuple) -- this is a set comprehension 
seen_set = {tuple(x) for x in original_list}

# the duplicates are just ones with counts > 1
duplicate_set = {t for t in seen_set if original_list.count(list(t)) > 1}

unique_set = seen_set - duplicate_set

您的函数也可以简单地写成

def readcsv(input_file):
    ifile = open(combined, "rU")
    reader = csv.reader(ifile, delimiter=";")
    return sorted(reader)  # don't mutate global variables!

original_list = readcsv(input_file)

可能是Ok的副本。当你用谷歌搜索那个不可避免地导致堆栈溢出的错误消息时,你发现了什么?
duplicate\u set=set(如果在seen\u set或seen\u set.add(x)中有x,那么在原始\u列表中的x代表x))
这段代码被破坏了<代码>已设置。添加(x)为
None
。导致错误的原因是
x
是一个列表,但即使将
x
包装到
tuple(x)
中,代码仍无法按预期工作<代码>集合s总是唯一的,为什么需要一个重复的集合?我发现我可能在列表和字典方面有问题,但由于我是一个新手程序员,我一般都会问这个问题,以防我不理解这个问题。谢谢!我已经做了这些改变。现在脚本运行时没有错误,但似乎永远在这一行运行:dups5.py(21):duplicate_set={t for t in unique_set if origing_list.count(list(t))>1}这不是无限循环。如果你有一台大数据/速度慢的计算机,那么会有更有效的实现方法(主要是使用
循环和计数器),但你必须自己解决这个问题。很好,等待没有问题。非常感谢你。
def readcsv(input_file):
    ifile = open(combined, "rU")
    reader = csv.reader(ifile, delimiter=";")
    return sorted(reader)  # don't mutate global variables!

original_list = readcsv(input_file)