从任何顺序的python嵌套列表中删除重复的字符串

时间:2018-04-05 11:49:02

标签: python list nested duplicates nested-lists

[["hello", "bye", "start"], ["bye", "start", "hello"], ["john", "riya", "tom"], ["riya","john", "tom"].....]

我有一个这样的清单。我想从Python中的嵌套列表中删除重复元素,其中元素应该是任何顺序。

输出应为: -

[["hello", "bye", "start"], ["john", "riya", "tom"]]

3个字符串在任何列表中只应出现一次。 怎么做到这一点?

5 个答案:

答案 0 :(得分:10)

只需转换为set,它就会自动删除项目。

a = [list(i) for i in {frozenset(k) for k in a}]

答案 1 :(得分:2)

您可以使用minimum: 1

enumerate

输出:

s = [["hello", "bye", "start"], ["bye", "start", "hello"], ["john", "riya", "tom"], ["riya","john", "tom"]]
new_s = [a for i, a in enumerate(s) if not any(all(c in h for c in a) for h in s[:i])]

答案 2 :(得分:1)

试试这个: -

a = [["hello", "bye", "start"], ["bye", "start", "hello"], ["john", "riya", "tom"], ["riya","john", "tom"]]

ls = []
for i in a:
    i = sorted(i)
    if i not in ls:
        ls.append(i)
print(ls)

正如你所说想要拥有像list一样的输出然后尝试这种棘手的方法,但它不会成为pythonic方式: -

ls = []
ind = []
for i,j in enumerate(a):
    j = sorted(j)
    if j not in ls:
        ind.append(i)
        ls.append(j)
ls1 = [a[x] for x in ind]
print(ls1)

<强>输出: -

[['hello', 'bye', 'start'], ['john', 'riya', 'tom']]

答案 3 :(得分:0)

一个简单而天真的解决方案

arr = [["hello", "bye", "start"], ["bye", "start", "hello"], ["john", "riya", "tom"], ["riya","john", "tom"]]

seen, tmp, result = list()

for i in arr:
  for j in i:
    if j not in seen:
      seen.append(j)
      tmp.append(j)

      if len(tmp) == 3:
        result.append(tmp)
        tmp = list()

print result

请记住,这只会附加包含3个元素的列表,因此某些情况可能会导致输出列表中缺少元素(根据您的示例和给出的说明)

答案 4 :(得分:0)

我认为这是一个非常简单的解决方案:

$error

输出:

a = [['hello', 'bye', 'start'], ['bye', 'start', 'hello'], ['john', 'riya', 'tom'], ['riya', 'john', 'tom']]
for i in range(len(a)):
    a[i].sort()
for i in a:
    if i not in b:
        b.append(i)