Ваше решение должно работать нормально, но для ясности вы можете распаковать элементы в пределах списка. Обратите внимание, что следует проверить на логическое значение x
через if x
:
true_grp = [(value, flag) for value, flag in zip(l, tags) if flag]
false_grp = [(vale, flag) for value, flag in zip(l, tags) if not flag]
Поскольку эти списки связаны, гораздо лучше использовать словарь для хранения значений «Истина» и «Ложь». A collections.defaultdict
удобно:
from collections import defaultdict
grp = defaultdict(list)
for value, flag in zip(l, tags):
grp[flag].append(value)
Затем используйте grp[0]
или grp[False]
вместо false_grp
; аналогично grp[1]
или grp[True]
вместо true_grp
.
Одноходовое решение на основе словаря также имеет преимущество работы с произвольными итерациями l
и tags
. Если любой из них является итератором, решение для понимания списка не будет работать для false_grp
, поскольку итерируемое может быть пройдено только один раз.