Python 类型错误:不可损坏的类型:';列表';
我试图使用Python读取包含数千个电子邮件地址的CSV文件,然后创建所有重复项的列表。以下是我到目前为止的情况: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 =
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)