Каждый элемент в списке L является кортежем формы (поля, размер). НапримерОтбирать список для поиска самых непересекающихся членов в Python
L = [ (['A','B'], 5), (['A'], 6), ('C', 1)]
Я хотел бы отбраковать список так, он содержит только непересекающиеся членов, и каждый элемент, который остается был больше, чем любые другие члены это, возможно, пересекались. Таким образом, например, список L будет сокращен до
L = [ (['A'], 6), ('C', 1)]
В настоящее время я это реализовано так:
def betterItem(x, y):
return (x != y and
set(x[0]) & set(y[0]) and
x[1] > y[1])
for i in range(len(L)-1):
L[:] = [x for x in L for y in L if betterItem(x, y)]
Есть ли лучше/быстрее/более Pythonic способ сделать это?
Спасибо за помощь!
Выглядит довольно pythonic для меня. Это то, что у вас там слишком медленно? Вы можете попробовать начать, найдя пары индексов, которые совпадают между членами списка, а затем только вызовите функцию betterItem по этим индексам, чтобы уменьшить их. –
@ Lattyware Done, спасибо за напоминание ... мои посещения SO обычно случаются очень редко, и я забываю это сделать. – Albeit