亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在類中使用命名存根

在類中使用命名存根

躍然一笑 2022-09-27 16:23:03
我正在練習奧雷利的書《流利的蟒蛇》中的一段代碼。這段代碼如下所示: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]我可以看到如何使用命名tuple的功能將排名中的每個值分配給所有套裝。作為我自己的實踐之一,我想尋求有關在此范式中分配值的幫助。具體來說,在此代碼段中,與其給一個學生四個成績,不如使用命名tuple功能為一個學生分配各自獨特的成績的方法是什么?(例如約翰-89,杰伊-98,喬-87,約瑟夫-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]
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

在書中的代碼中,每套西裝都有每一個價值——它是西裝和價值的笛卡爾積。在您的代碼中,您只需要從學生到成績的一對一映射。這通常使用 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)

]




查看完整回答
反對 回復 2022-09-27
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

這與命名元組沒有任何關系。使用卡,您可以使用 和 的每個元素創建一個新實例。Cardrankssuits

對于 ,您希望使用壓縮結果中的每個元素并一起創建一個新實例。gradeStudentnamesgrades

def __init__(self):
    self._stud=[Student(name,grade) 
                for name, grade in zip(self.names, self.grades)]


查看完整回答
反對 回復 2022-09-27
  • 2 回答
  • 0 關注
  • 77 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號