将列表传输到对象的Python列表索引器

将列表传输到对象的Python列表索引器,python,list,Python,List,所以我正在做一项任务,我遇到了一个似乎无法克服的障碍。我基本上是在设计一个基本的图书馆系统。我必须从一个文件中读入书籍、图书管理员和用户,并将它们解析为列表,然后再解析为对象。我已经完成了对列表的解析部分,并准备好用于创建对象。当我试图从我得到的列表和indexer中读取时,我就遇到了这个问题,我不知道如何解决它 在我的列表中,第一项是ISBN,然后是书名,然后是作者,然后是重复的,即[123]、“红字”、“纳撒尼尔·霍桑”] 我遇到问题的地方。我试过使用len(self._bookList)-

所以我正在做一项任务,我遇到了一个似乎无法克服的障碍。我基本上是在设计一个基本的图书馆系统。我必须从一个文件中读入书籍、图书管理员和用户,并将它们解析为列表,然后再解析为对象。我已经完成了对列表的解析部分,并准备好用于创建对象。当我试图从我得到的列表和indexer中读取时,我就遇到了这个问题,我不知道如何解决它

在我的列表中,第一项是ISBN,然后是书名,然后是作者,然后是重复的,即[123]、“红字”、“纳撒尼尔·霍桑”]

我遇到问题的地方。我试过使用len(self._bookList)-1、+1、+2、+3。似乎什么都不管用

def _addToCollection(self):
    i = 0
    while i < len(self._bookList):
        ISBN = []
        ISBN.append(self._bookList[i])
        title = []
        title.append(self._bookList[i+1])
        author = []
        author.append(self._bookList[i+2])      
        #print(self._bookList[i],self._bookList[i+1],self._bookList[i+2])
        BookCollection.addBook(self,str(ISBN[i]),str(title[i]),str(author[i]))
        i += 1
def\u添加到集合(自):
i=0
而我
更改您的init方法,然后执行此操作

a = BookCollection.addBook(*self._bookList)

问题是您在每次迭代期间都分配空列表。调用
ISBN[i]
时,列表始终只有一个元素。因此,只要
i
大于零,它就会失败

解决此问题的一种方法是注意到您根本不需要列表:

def _addToCollection(self):
    i = 0
    while i < len(self._bookList):
        ISBN = self._bookList[i]
        title = self._bookList[i+1]
        author = self._bookList[i+2]
        BookCollection.addBook(self,str(ISBN),str(title),str(author))
        i += 3
您可以这样使用它:

for ISBN, title, author in grouper(3, self._bookList):
    BookCollection.addBook(self, str(ISBN), str(title), str(author))

当我将三个等待列表添加到开头时,就像这样。它进入一个无限循环
def\u addToCollection(self):i=0 ISBN=[]title=[]author=[],而i
您根本不需要使用列表。我知道它是如何工作的,但现在我得到了一个名称错误。
def grouper(n,iterable,fillvalue=None):“grouper(3,'ABCDEFG','x')-->ABC def Gxx”args=[iter(iterable)]*n返回izip\u(fillvalue=fillvalue,*args)def_addToCollection(self):对于ISBN,title,grouper中的作者(3,self.\u图书列表):BookCollection.addBook(self,str(ISBN),str(title),str(author))
@Mark Byers:所以我需要根据文档从本质上剖析grouper使用了哪些函数,并实现这些函数?@Mark Byers:我使用了itertools import*
中的
,但我仍然得到一个名称错误。我忘了什么吗?这有什么帮助吗?我被你的响应者搞糊涂了,而不是做一个复杂的常量构造方法只是将列表的内容直接解包到addBook中
def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
for ISBN, title, author in grouper(3, self._bookList):
    BookCollection.addBook(self, str(ISBN), str(title), str(author))