如何在python中相对于索引交叉列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在python中相对于索引交叉列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1563字,纯文字阅读大概需要3分钟。
内容图文
![如何在python中相对于索引交叉列表](/upload/InfoBanner/zyjiaocheng/792/938ac1d18a8141bd82dbc8c945d810c5.jpg)
我知道这个问题看起来像是重复的.但我很难解决这个问题,但我无法找到有用的解决方案
我正在使用python实现旅行商问题的遗传算法
假设我们有这些列表(旅游)
a = [1,0,2,5,4,3,1]
b = [1,2,5,4,3,0,1]
c = [1,3,5,4,2,0,1]
如您所见,[5,4]在整个3个列表中重复出现
并且常规交叉点将返回列表中的所有元素.
我想要一些像intersect_list(a,b)这样的函数
返回[5,4]
是否有一个python内置方式来找到它?或者你有什么建议吗?
注意:我知道我可以循环来解决这个问题,但请记住,在我的情况下,我有大约400个列表.每个长度为401.
换句话说:我希望看到这些列表之间的共同路径.
如果有什么不清楚的地方请告诉我
提前致谢.
解决方法:
看了@pyfunc发布的链接后,我想出了以下内容:
def shortest_of(lists):
return min(lists, key=len)
def contains_sublist(lst, sublst):
n = len(sublst)
return any((sublst == lst[i:i+n]) for i in xrange(len(lst)-n+1))
def longest_common(lists):
if not lists:
return ()
res = set()
base = shortest_of(lists)
length = len(base)
for i in xrange(length, 0, -1):
for j in xrange(length - i + 1):
candidate = ', ' + str(base[j:i+j]).strip('[]') + ','
#candidate = base[j:i+j]
for alist in lists:
if not candidate in ', ' + str(alist).strip('[]') + ',':
#if not contains_sublist(alist, candidate):
break
else:
res.add(tuple([int(a) for a in candidate[2:-1].split(',')]))
#res.add(tuple(candidate))
if res:
return tuple(res)
return ()
if __name__ == '__main__':
a = [1,0,2,5,4,3,1]
b = [1,2,5,4,3,0,1]
c = [1,3,5,4,2,0,1]
print longest_common([a,b,c])
print longest_common([b,c])
输出:
((5, 4),)
((0, 1), (5, 4))
编辑:
更新了使用字符串转换和匹配的解决方案,因为它碰巧更快.以前的解决方案部分已被注释掉.此外,它现在提供了所有可能性.
内容总结
以上是互联网集市为您收集整理的如何在python中相对于索引交叉列表全部内容,希望文章能够帮你解决如何在python中相对于索引交叉列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。