迭代类对象列表 - 'pythonic'方式

Goh*_*anP 1 python python-2.7

我有一个test_cases包含类对象的列表.每个对象都有一个名为的属性ident.我想迭代列表中的所有对象,并在值下执行某些操作ident

这是我的代码:

class TestCase:
    def __init__(self, title, ident, description):
        self.title = title
        self.ident = ident
        self.description = description

test_cases = []
test_cases.append(TestCase(**tc_dict)

i = 0
while i != len(test_cases):
    print test_cases[i].ident
    i += 1
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我想问,如果有更多'pythonic'的方式来做到这一点.

Mar*_*nen 6

使用for循环直接迭代对象(而不是迭代它们的索引):

for test_case in test_cases:
    print test_case.ident
Run Code Online (Sandbox Code Playgroud)

这是通用方法,当您想循环遍历对象时,应该使用99%的时间.它在这里工作得很好,可能是理想的解决方案.

如果您确实需要索引,则应使用enumerate():

for index, test_case in enumerate(test_cases):
    print index, test_case.ident
Run Code Online (Sandbox Code Playgroud)

它仍在循环遍历对象,但它同时从中接收索引enumerate.


在您的特定用例中,还有另一种选择.如果你有很多对象,那么逐个打印它们可能会很慢(调用print相当昂贵).如果性能成为一个问题,您可以使用str.join预先连接值,然后将它们全部打印一次:

print '\n'.join(tc.ident for tc in test_cases)
Run Code Online (Sandbox Code Playgroud)

我个人推荐第一种方法,当你需要打印很多东西并且实际上可以用肉眼看到性能问题时,只会参考后者.