Python从列表中删除部分重复项
我有一个不正确创建的项目列表。它不是一次复制整个项目,而是复制同一项目的多个部分副本。部分重复项与其他重复项和一些唯一项混合。例如,列表a: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=['一二','一二三四','一二三','五六','五六七','八九']
我想删除部分重复项并保留项的最长表达式。例如,我想生成列表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
循环。前面的代码用于列表理解: