我正在练习O'Reily的书Fluent Python中的一段代码。
这段代码如下:
import collections
Card= collections.namedtuple('Card',['rank','suit']);
class FrenchDeck:
ranks=[str(n) for n in range (2,11)]+ list('JQKA')
suits= 'spades diamonds clubs hearts'.split()
def __init__(self):
self._cards= [Card(rank,suit) for rank in self.ranks
for suit in self.suits]
def __len__(self):
return len(self._cards)
def __getitem__(self,position):
return self._cards[position]
我可以看到namedtuple的功能如何用于将等级中的每个值分配给所有西装。
作为我自己的实践之一,我想寻求有关在此范式中分配值的帮助。具体来说,在此片段中,不是给一个学生四个年级,而是使用namedtuple功能为一个学生分配各自的唯一年级的方法是什么?(例如John-89,Jay-98,Joe-87,Joseph-91)。我从本书样本中反省的方式仍将为所有学生分配所有成绩。非常感谢您的关注和帮助!
Student= collections.namedtuple('Student',['name','grade'])
studentname=["John","Jay","Joe","Joseph"]
class grade:
names= studentname
grades=[89,98,87,91]
def __init__(self):
self._stud=[
Student(name,grade) for name in self.names
for grade in self.grades ]
def __len__(self):
return len(self._stud)
def __getitem__(self,position):
return self._stud[position]
在本书的代码中,每个西装都具有每个价值-这是西装和价值的笛卡尔积。在您的代码中,您只需要从学生到成绩的一对一映射。通常使用完成此操作zip()
。您可以使用zip(self.names, self.grades)
,这将为您提供相应的对。那么你可以得到的名单Students
与
self._stud=[Student(n, g) for n, g in zip(self.names, self.grades)]
您也可以上课,这样它就不依赖于全局变量,而是采用类似以下内容的学生和成绩列表:
import collections
Student = collections.namedtuple('Student',['name','grade'])
studentname = ["John","Jay","Joe","Joseph"]
grades = [89,98,87,91]
class Grades:
def __init__(self, names, grades):
self._stud = [Student(n, g) for n, g in zip(names, grades)]
def __len__(self):
return len(self._stud)
def __getitem__(self,position):
return self._stud[position]
g = Grades(studentname, grades)
g._stud
将会:
[
Student(name='John', grade=89),
Student(name='Jay', grade=98),
Student(name='Joe', grade=87),
Student(name='Joseph', grade=91)
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句