我想知道是否有做了Python的方式如下:如果在列表列表返回對象
if check_object in list_of_objects:
return #the object from list
else:
return check_object
我可以遍歷列表中找到匹配的對象,如果發現名單內,但這似乎是矯枉過正,有沒有更pythonic的方式來做到這一點?
我想知道是否有做了Python的方式如下:如果在列表列表返回對象
if check_object in list_of_objects:
return #the object from list
else:
return check_object
我可以遍歷列表中找到匹配的對象,如果發現名單內,但這似乎是矯枉過正,有沒有更pythonic的方式來做到這一點?
x = ['a', 'b', 'c']
if 'b' in x:
print x[x.index('b')]
else:
print 'not found'
您也可以返回對象本身。與Python工作> = 2.4:
print 'a' in x and 'a' or 'not found'
return check_object if check_object in list_of_objects else None
這不會執行查找,這是必需的。 –
我想這會工作...
try:
idx = list_of_objects.index(check_object)
return list_of_objects[idx]
except ValueError:
return check_object
這樣做的優點是,它僅需要尋找在列表中的對象一次(而不是兩次),正如其他一些解決方案所暗示的那樣。此外,許多人認爲「請求寬恕」而不是「跳躍式前瞻」更加pythonic。 (EAFP vs LBYL)
「說這兩個對象是庫存的一部分,你只需要每個對象的一個實例,這些對象可以被認爲是平等的名稱,但有其他不同的屬性,所以你想返回對象已經沒有一個新的「
雖然你在這裏做什麼不會達到。您正在查找列表中是否存在對象,然後返回相同的對象。 它們不能具有不同的屬性,因爲您正在測試身份並且不是相等的。
這可能是更好的爲您更換list_of_objects
與dict_of_objects
和基於對象的ID或名字就查找:
# Example class with identifier
class ExampleObject(object):
def __init__(self, name):
self.name = name
example1 = ExampleObject('one')
# Object Registry: just convenience methods on a dict for easier lookup
class ObjectRegistry(dict):
def register(self, object):
self[object.name] = object
def lookup(self, object):
name = getattr(object, 'name', object)
return self.get(name, object)
# Create the registry and add some objects
dict_of_objects = ObjectRegistry()
dict_of_objects.register(example1)
# Looking up the existing object will return itself
assert dict_of_objects.lookup(example1) is example1
# Looking up a new object with the same name will return the original
example1too = ExampleObject('one')
assert dict_of_objects.lookup(example1too) is example1
所以,檢查是否存在在列表中總是會返回相同項目作爲匹配的那個,而比較字典中的鍵允許您檢索不同的項目。
如果'check_object'在列表中,那麼從列表中返回對象無論如何都等價於返回'check_object'。不管怎麼樣,你爲什麼不返回'check_object'? – BrenBarn
說這兩個對象是一個清單的一部分,你只需要每個對象的一個實例,這些對象可以被認爲是平等的名稱,但有其他不同的屬性,所以你想返回對象,你已經沒有一個新的 –
也如果檢查對象是一個內存豬我不希望兩個同時存在的版本相同,而是讓一個垃圾收集,並使用其他 –