正在从列表列表中删除非唯一项目



给定以下列表

[['cat','dog','rabbit'],['cat','eagle','snail'],['crab','dog','fish'],['rat','bat','frog']]

我如何排除任何出现过一次以上的动物?我目前正在使用循环,但我确信有更好的方法。

最终结果应该是这样的:

[['rabbit'],['eagle','snail'],['crab','fish'],['rat','bat','frog']]

您可以在python中使用Counter或collections包中的dict将每个字符串的计数存储在列表中,然后对其进行迭代,如果计数为1 ,则保留它

以下是@sky的答案详细信息:

from collections import Counter
from itertools import chain
lol = [
['cat', 'dog', 'rabbit'],
['cat', 'eagle', 'snail'],
['crab', 'dog', 'fish'],
['rat', 'bat', 'frog'],
]
cnt = Counter(chain.from_iterable(lol))
result = [[x for x in sublist if cnt[x] == 1] for sublist in lol]

这给出:

[['rabbit'],
['eagle', 'snail'],
['crab', 'fish'],
['rat', 'bat', 'frog']]

我使用了for循环。可能太复杂了:

from copy import deepcopy
arr_of_arrays = [['cat','dog','rabbit'],['cat','eagle','snail'],['crab','dog','fish'],['rat','bat','frog']]
result = []
for arr in arr_of_arrays:
temp_arr_of_arrays = deepcopy(arr_of_arrays)
temp_arr_of_arrays.remove(arr)
temp_arr = []
for animal in arr:
if not any(animal in arr_ for arr_ in temp_arr_of_arrays):
temp_arr.append(animal)
result.append(temp_arr)
print(result)

输出

[['rabbit'], ['eagle', 'snail'], ['crab', 'fish'], ['rat', 'bat', 'frog']]

感谢反馈!

最新更新