我怎樣才能做一個更簡潔,「Python的」辦法如下:列表中元素的更簡潔的賦值(Python)?
for element in some_list:
if some_condition:
element.some_attr = some_value
我怎樣才能做一個更簡潔,「Python的」辦法如下:列表中元素的更簡潔的賦值(Python)?
for element in some_list:
if some_condition:
element.some_attr = some_value
您的代碼中唯一不是Python python的是您沒有使用4 spaces for indentation。
「Pythonic」並不總是指「簡潔」;例如以下內容比您的循環更短,但可讀性更差:
[setattr(e, 'some_attr', some_value) for e in some_list if some_condition]
因此,堅持您的代碼。
any(setattr(element, "some_attr", some_value) for element in some_list if some_condition)
不一定是「更Python」 - 但更簡潔。函數調用「任何」只是爲了使生成器被消耗 - 因爲它被創建爲一個懶惰的對象,並且只有在元素被獲取時纔會執行這些操作。
此外,'any'因爲'setattr'總是工作返回'None',因此any()消耗整個迭代器。 'all'不會奏效。不得不考慮這些事情會降低循環的清晰度。 –
您的代碼沒問題。
可能是你可以喜歡這樣的:
for element in some_list:
element.some_attr = some_value if some_condition else element.some_attr
但它確實沒用assignements ...
我個人認爲,你現在所擁有的是簡單,直接,因此Python的。 – NPE
這取決於您是否想要變更原始列表,還是創建一個新列表。在最後一種情況下,可以使用某種映射(或理解)。 – santiagobasulto
從「Python的禪」(http://www.python.org/dev/peps/pep-0020/):「明確比隱含更好」 – Don