python - 检查列表的值是否包含在列表的其他值之一中的最有效方法是什么?
问题描述
最近我试图解决我在代码中遇到的一个问题,即检查一个列表的值是否包含在同一个列表的其他值中。我的特定列表包含电话号码,所以它看起来像这样:
['972526174656' , '526174656' , '174656']
但我希望它看起来像这样:
['972526174656']
我试图用最简单的方法在另一个内部解决它:
phones_list = ['972526174656' , '526174656' , '174656']
drop_list = []
for phone in phones_list:
for phone2 in phones_list:
if phone2.contains(phone) and phone2!=phone:
drop_list.append(phone)
phones_list = list(set(phones_list) - set(drop_list))
虽然这个例子有效,但它的效率很差,在我的原始数据中,我有 3,000,000 个案例,就像我向您展示的那样。所以效率是我的代码成功的关键!
我希望社区可以帮助我解决这个问题。非常感谢您的任何帮助!
解决方案
您可以使用itertools.permutations
:
phones_list = ['972526174656' , '526174656' , '174656']
drop_list = []
for p1,p2 in itertools.permutations(phones_list, 2):
if p1 in p2:
drop_list.append(p1)
phones_list = list(set(phones_list) - set(drop_list))
推荐阅读
- node.js - 无法读取未定义的属性“名称”,而“名称”甚至不在代码中
- php - 阅读框架 laravel
- python - 将 pandas 列与列表中的值进行比较并返回更高的下限值
- javascript - Node.js MSSQL包查询功能不返回数据
- sql-server - dacpac 文件向 LocalDB 发布错误:“无法部署该元素。该元素包含无法在目标数据库中重新创建的状态。”
- python - Finding the frequency that each column is a row minimum
- python - 删除熊猫列中的特定单词
- node.js - 为什么我在我的 mongoose 预架构上遇到这些错误?
- javascript - 在烧瓶中提交之前验证 DOM 中的 html 输入
- for-loop - Python - for 循环 - 理解