Данный: список списков, например [[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]
Todo: найдите самый длинный общий префикс всех подсписок.
Существует: в другом потоке Общие элементы между двумя списками, не использующими наборы в Python ", предлагается использовать" Counter ", который доступен выше python 2.7. Однако наш текущий проект был написан на python 2.6, поэтому" Counter" не используется.
В настоящее время я кодирую его так:
l = [[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]
newl = l[0]
if len(l)>1:
for li in l[1:]:
newl = [x for x in newl if x in li]
Но я считаю, что это не очень питонов, есть ли лучший способ кодирования?
Спасибо!
Новое редактирование. Извините, что в моем случае общие элементы списков в 'l' имеют одинаковый порядок и всегда начинаются с 0-го элемента. Таким образом, у вас не будет таких случаев, как [[1,2,5,6],[2,1,7]]