2017-04-02 47 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()吧。