Я знаю, что использование побочных эффектов в понимании списков Python не является хорошей практикой. Но я не могу понять, почему происходит что-то вроде следующего:
In [66]: tmp = [1,2,3,4,5]; [tmp.remove(elem) for elem in tmp]
Out[66]: [None, None, None]
In [67]: tmp
Out[67]: [2, 4]
Независимо от того, является ли это хорошей практикой, не должна ли внутренняя часть понимания списка делать что-то предсказуемое? Если приведенное выше является предсказуемым, может ли кто-нибудь объяснить, почему произошло только три операции remove
и почему остались только четные записи?
None or...
не работает. Оказывается, это работало, и я не понимал, что индекс меняется. - person ely   schedule 17.10.2012None
, на самом деле является дорогостоящим вычислением, которое может привести к возвратуNone
, и в этом случае удаление элементов изtmp
, где это происходит, может быть жизнеспособным выбор за мной. Но в любом случае было бы нехорошо также включать предложениеif
в конце понимания списка, потому что это потребовало бы повторного вычисления этой дорогостоящей функции, чтобы знать, что оставить. - person ely   schedule 17.10.2012None or x
просто какx
. - person Josh Lee   schedule 17.10.2012None
может быть возвращено дорогой функцией в моем реальном коде. - person ely   schedule 17.10.2012None
в вашем результате на самом деле является возвращаемым значением изtmp.remove
. - person Josh Lee   schedule 17.10.2012