首页 > 解决方案 > 检查列表的值是否包含在列表的其他值之一中的最有效方法是什么?

问题描述

最近我试图解决我在代码中遇到的一个问题,即检查一个列表的值是否包含在同一个列表的其他值中。我的特定列表包含电话号码,所以它看起来像这样:

['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 个案例,就像我向您展示的那样。所以效率是我的代码成功的关键!

我希望社区可以帮助我解决这个问题。非常感谢您的任何帮助!

标签: pythonlistdata-structures

解决方案


您可以使用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))

推荐阅读