Given:列表的列表,例如[[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]
Todo:查找所有子列表中最长的公共前缀。
Exists:在另一个线程“两个列表之间的公共元素不使用 Python 中的集合”中,建议使用“计数器”,它在 python 2.7 之上可用。但是我们当前的项目是用 python 2.6 编写的,所以没有使用“计数器”。
我目前这样编码:
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]
但我发现它不是很pythonic,有没有更好的编码方式?
谢谢!
新编辑:抱歉提一下:在我的情况下,“l”中列表的共享元素具有相同的顺序,并且总是从第 0 项开始。所以你不会有像[[1,2,5,6],[2,1,7]]