我有一个从文本文件中读取行的程序,每行包含一个单词,例如价格或产品名称。程序读取所有行并将每个单词保存在列表中。文件中的每个产品包含三行,分别是:产品名称,价格和重量。所以在列表中将如下所示: ['Mjölk','15 kr','1升','Köttfärs','80 kr','1 kg','Morötter','20 kr','1 kg']
现在问题,我有班级:
if ( a < b )
{
a = b;
return ( 1 );
}
else
{
return ( 0 );
}
我想从列表中的项目中创建Produkt对象,但我不知道如何遍历列表中的项目,然后将它们保存为对象。 我在想我会为这些对象制作一个列表,然后像: 对于listofprodukts中的项目: objectlits.append(Produkt(item,item,item))
但这显然不起作用,任何人都知道如何做到这一点?
答案 0 :(得分:2)
for i in range(len(listofprodukts)//3): #use xrange if it's python2
#// -> floor division. Will silently chop off excess if len(listofprodukts) isn't a multiple of 3
#print(listofprodukts[3*x:3*(x+1)]) # this expression makes chunks of three. Uncomment me to see :P
objectlits.append(Produkt(*listofprodukts[3*x:3*(x+1)]))
# ^This * is for argument unpacking
我使用list slicing以三人一组的方式捆绑您的列表。因为我很懒,所以我使用argument unpacking将它们提供给您的对象创建者。
Admendum:我同意TextGeek,如果您要做这类事情,那么进行一些验证会很有用。
我个人把它放在模型中,但那只是我。
class Produkt:
def __init__(self, produkt, pris, vikt):
if not pris.endswith('kr'):
raise ValueError("Invalid price {}. Prices should be in kr".format(pris))
#raise ValueError, "Prices ..etc" for python 2
self.produkt = produkt
self.pris = pris
self.vikt = vikt
答案 1 :(得分:1)
假设这三个属性始终按顺序排列,您可以简单地迭代每个第三个索引并对列表进行切片:
class Produkt:
def __init__(self, produkt, pris, vikt):
self.produkt = produkt
self.pris = pris
self.vikt = vikt
lst = ['Mjölk', '15 kr', '1 liter', 'Köttfärs', '80 kr', '1 kg', 'Morötter', '20 kr', '1 kg']
produkts = []
for i in xrange(0,len(lst),3): #in python 3.x use range() instead
produkts.append(Produkt(lst[i], lst[i+1], lst[i+2]))
答案 2 :(得分:0)
如果你想循环尝试
For x in range(0 , 3):
您可以根据需要更改三次迭代次数。该示例将进行3次迭代。
答案 3 :(得分:0)
ProduktList =[]
for i in xrange(0,len(ListOfAllProuctsStuff),3)
ProduktList.append(Produkt(ListOfAllProuctsStuff[i],ListOfAllProuctsStuff[i+1],ListOfAllProuctsStuff[i+2])
答案 4 :(得分:0)
假设属性顺序是一致的。
text_list = ['Mjolk','15 kr','1升','Kottfers','80 kr','1 kg','Morotter','20 kr','1 kg']
class Produkt: def init (self,produkt,pris,vikt): self.produkt = produkt self.pris = pris self.vikt = vikt
##make a representation of the Produkt object so we can verify we're getting what we want
def __repr__(self):
return_string = "|{}, {}, {}|".format(self.produkt, self.pris, self.vikt)
return(return_string)
object_list = [] ##创建一个空对象列表 index = 0 ##创建索引变量并将其设置为0
而索引&lt; LEN(text_list):
##Use the index to get this Produkt's produkt, pris, and vikt
produkt = text_list[index]
pris = text_list[index+1]
vikt = text_list[index+2]
##Create the new Produkt object
new_product = Produkt(produkt, pris, vikt)
##add the new product to the object list
object_list.append(new_product)
##Set the index to the next produkt in the list
index += 3
print(object_list)##打印列表对象以确保我们有我们想要的东西