Python从列表中删除部分重复项

Python从列表中删除部分重复项,python,duplicates,partial,Python,Duplicates,Partial,我有一个不正确创建的项目列表。它不是一次复制整个项目,而是复制同一项目的多个部分副本。部分重复项与其他重复项和一些唯一项混合。例如,列表a: a=['一二','一二三四','一二三','五六','五六七','八九'] 我想删除部分重复项并保留项的最长表达式。例如,我想生成列表b: b=['一二三四','五六七','八九'] 项目的完整性必须保持完整,不能成为: c='[2-1-3-4',vife-6-7',8-9']试试这个: def组_部分(字符串): it=iter(已排序(字符串)) 上一

我有一个不正确创建的项目列表。它不是一次复制整个项目,而是复制同一项目的多个部分副本。部分重复项与其他重复项和一些唯一项混合。例如,列表a:

a=['一二','一二三四','一二三','五六','五六七','八九']

我想删除部分重复项并保留项的最长表达式。例如,我想生成列表b:

b=['一二三四','五六七','八九']

项目的完整性必须保持完整,不能成为:

c='[2-1-3-4',vife-6-7',8-9']

试试这个:

def组_部分(字符串):
it=iter(已排序(字符串))
上一个=下一个(it)
对于it中的s:
如果不是s.StartWith(上一个):
收益率预测
prev=s
产量
a=[“一二”,“一二三”,“一二三四”,“五六”,“五六七”,“八九”]
b=列表(组\部分(a))

您可以为此使用集合

试试这个代码

a = ['one two','one two three', 'one two three four', 'five six', 'five six seven','eight nine']

# check for subsets
for i in range(len(a)):
   for j in range(len(a)):
      if i==j: continue # same index
      if (set(a[i].split()) & set(a[j].split())) == set(a[i].split()): # if subset
         a[i]="" # clear string

# a = [x for x in a if len(x)]  # remove empty strings

b = []
for x in a:  # each string in a
   if len(x) > 0: # if not empty
      b.append(x)  # add to final list  

a = b

print(a)
输出

['one two three four', 'five six seven', 'eight nine']

['12','13','1']
上的预期行为是什么?那
['12','2']
呢?那么
['123',2']
呢?这个问题约束性很差。要丢弃的项目是否总是直接位于之前?部分重复项是否总是出现在它们复制的项目之前(或至少相邻)?或者,
“一两个”
会出现在您输入的最后,但它仍然应该被删除吗?我刚刚更新了列表。最长项目并不总是在最短项目之后。顺序是随机的。如果是这种情况,只需对它们进行排序,然后我的答案就会起作用。在迭代列表时更新列表时,请使用索引,以便内存地址保持不变。如果我在a中对I使用
,那么设置
I='abc'
不会更新列表,它只会创建一个局部变量。我不会总是设置(a[I].split())==set(a[I].split())。&做什么,加入他们?我在答案中添加了括号以使其更清楚。查看python集操作:“if len(x)中的x代表x”您能简化这个逻辑让我理解吗,或者给我链接一些我能读到的东西。许多感谢信更新为
for
循环。前面的代码用于列表理解: