Pythonic做'除了我自己'的方式'

时间:2010-12-06 15:14:49

标签: oop list python

基本上,想知道最好/最蟒蛇的方式是什么;

class thing(collectionclass):
    for onething in super(collectionclass,listofthings):
        if onething != self:
            do something

这显然是一个非常人为的例子,但希望这一点很清楚!

我正在考虑将整个事情折叠成列表理解,但想要社区意见

4 个答案:

答案 0 :(得分:3)

我个人使用

for onething in listofthings:
    if onething is self:
        continue
    # ...

避免一级嵌套。您还可以使用生成器表达式:

for onething in (x for x in listofthings if x is not self):
    # ...

另外,S.Lott的评论。

修改:根据@ greggo的评论,将==更改为is。最好不要让对象身份和平等混淆!

答案 1 :(得分:3)

请阅读PEP8。我会冗长而不是聪明。

class MyThing():
    def do_something_to_everyone_but_me(self, list_of_things)
        for one_thing in list_of_things:
            if one_thing is self:
                continue
            do_something_with(one_thing)

答案 2 :(得分:1)

我说答案取决于do something的复杂程度。如果它很简单,列表理解或生成器将非常整洁;如果它很复杂,你所拥有的就是美好而清晰(如果只是有点冗长。)

答案 3 :(得分:0)

continue上的self,或者首先使用genex排除。

for onething in (x for x in listofthings if x != self):
  ...