我目前在采取一些学校的计算机科学课程,并已经来到了一个死胡同,并需要一点点帮助的属性列表。就像标题所说的那样,我需要从一个文件中创建一个Class对象列表,其中包含一个没有添加到列表中的副本的对象,我可以用python set()
成功完成此操作,但显然这是不允许的任务,我尝试了各种其他方法,但似乎无法使用一套工作。我相信这个任务的重点是比较Python中的数据结构,并使用最慢的方法,因为它也必须定时。我的代码将使用set()
将提供。创建类的对象从一个文件中,没有重复的对象
import time
class Students:
def __init__(self, LName, FName, ssn, email, age):
self.LName = LName
self.FName = FName
self.ssn = ssn
self.email = email
self.age = age
def getssn(self):
return self.ssn
def main():
t1 = time.time()
f = open('InsertNames.txt', 'r')
studentlist = []
seen = set()
for line in f:
parsed = line.split(' ')
parsed = [i.strip() for i in parsed]
if parsed[2] not in seen:
studentlist.append(Students(parsed[0], parsed[1], parsed[2], parsed[3], parsed[4]))
seen.add(parsed[2])
else:
print(parsed[2], 'already in list, not added')
f.close()
print('final list length: ', len(studentlist))
t2 = time.time()
print('time = ', t2-t1)
main()
需要注意的是,唯一需要检查的重复项是那些.ssn属性,并且不应将重复项添加到列表中。有没有办法在添加之前通过该特定属性检查列表中已有的内容?
编辑:忘记提到只有1允许在内存中的列表。
考虑写'学生(*解析)'有隐含检查字段数的优势。 (并命名为'Student',因为它只是一个。) –
我喜欢'(* parsed)'技巧!感谢那! – deadsightsx