Python 从元组列表中删除字符串

Python 从元组列表中删除字符串,python,python-3.x,Python,Python 3.x,我需要从元组列表中删除语义相似性字符串 以下是我的意见: [(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')] 预期产出: [(327, 329, 'Apache Kafka')] 达到效果的最佳方法是什么?最简单的方法,但可能不是最佳方法 data = [(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')] res

我需要从元组列表中删除语义相似性字符串

以下是我的意见:

[(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')]
预期产出:

[(327, 329, 'Apache Kafka')]

达到效果的最佳方法是什么?

最简单的方法,但可能不是最佳方法

data = [(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')]
result = []
print(data)
for item1 in data:
    hasSimilar = False
    for item2 in data:
        if item2==item1:
            continue
        if item1[2] in item2[2]:
            hasSimilar = True
            break
    if not hasSimilar:
        result.append(item1)
print(result)
输出:

[(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')]
[(327, 329, 'Apache Kafka')]

这是我的方法。如果有更好的处理方法,请告诉我

data = [(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')]
uniques = [ i for i in data if not any(i[2].lower() in x[2].lower() and i[2].lower() != x[2].lower() for x in data)]
print(uniques)

回答得很好。谢谢你的密码。请查看我的方法,并让我知道这是否是最佳方法。thotam,我不知道您的方法是否最佳,但它比我的好:)确实需要列表(set())?您是对的,列表(set())不是必需的。更新了代码。你能介绍一下它是如何工作的,这样不熟悉代码的人就可以跟着做了吗?
data = [(327, 328, 'Apache'), (327, 329, 'Apache Kafka'), (328, 329, 'Kafka')]
result = []

for i in data:
    for x in data:
        if i[2] in x[2]:
            if i == x:
                break
            result.append(x)

print(result)