2017-04-02 62 views
1

我正在嘗試列表理解,我堅持下面的問題。列表理解與實例

class Programmer(): 
    def __init__(self, name, years_at_umich=1, programs_written=0): 
     self.name = name 
     self.seniority = years_at_umich 
     self.bonus_points = random.randrange(1000) 
     self.programs_written = programs_written 

    def shout(self, phrase_to_shout): 
     print phrase_to_shout # print is for ppl! 

    def __str__(self): 
     return "My name is {}, and I've been at UMich for about {} years.".format(self.name,self.seniority) 

    def year_at_umich(self): 
     return self.seniority 

prog_tups = zip(names, seniority,programs_written) 
print prog_tups 

打印輸出

[('Albert', 1, 10), ('Bisi', 5, 500), ('Cai', 2, 20), ('Dinesh', 4, 131), ('Euijin', 1, 46)] 

我試圖使用列表理解從上面創建編程實例的列表出來的prog_tups名單,並保存在變量程序員該列表。

我當前的代碼如下,我沒有得到一個回溯,但沒有任何反應:

programmers = [item for item in prog_tups] 
+1

'程序員= [項目在prog_tups項目]'只是複製''中programmers' prog_tups' ......你可能需要_print_'programmers'得到一個輸出... –

+1

你是什麼意思程序員實例? Programmer類在哪裏? – alDiablo

+1

@ Jean-FrançoisFabre,在這種情況下,他可以只打印名字(因爲它包含程序員的名字) – RomanPerekhrest

回答

1

在情況下,如果你沒有一個自定義Programmer類還可以考慮使用collections.namedtuple子類:

import collections 

Programmer = collections.namedtuple('Programmer', 'name seniority programs_written') 
prog_tups = [('Albert', 1, 10), ('Bisi', 5, 500), ('Cai', 2, 20), ('Dinesh', 4, 131), ('Euijin', 1, 46)] 
programmers = [Programmer(n, s, p) for n,s,p in prog_tups] 

# the first programmer 
print programmers[0] 

輸出:

Programmer(name='Albert', seniority=1, programs_written=10) 

爲了應對現有的自定義類,使用以下方法:

prog_tups = [('Albert', 1, 10), ('Bisi', 5, 500), ('Cai', 2, 20), ('Dinesh', 4, 131), ('Euijin', 1, 46)] 
programmers = [Programmer(*t) for t in prog_tups] 

# the first programmer 
print programmers[0] 

輸出:

My name is Albert, and I've been at UMich for about 1 years. 
+0

真棒,做了伎倆,謝謝。另外我編輯我的代碼以添加Programmer類。 – Avery9115

+0

@ Avery9115,歡迎參加我的更新以處理您的自定義課程 – RomanPerekhrest

0

如果我正確理解你的問題,你想擁有隻是名稱的列表。由於名稱是元組中的第一個元素,因此一個簡單的解決方案是programmers = [item[0] for item in prog_tuples]以獲取名稱。看看這個工程,只需print()吧。