select 列表列表中的前 3 个独特项目

select top 3 unique items in a list of list

我有一个项目列表,它输出一个列表列表:

item_list = ['book', 'pen']
output = [
    ['pencil', 'eraser', 'pen', 'glue', 'folders'], 
    ['notepad', 'book','pencil', 'markers','ruler','scissors']
]

有没有办法将输出作为一个唯一的项目列表,其中包含每个子列表中的前 3 个项目,但不在初始 item_list 中?

以便输出看起来像(按照确切的顺序):

new_output = ['pencil', 'eraser', 'glue', 'notepad', 'markers', 'ruler']

或者如果可能的话:

new_output = ['pencil', 'notepad', 'eraser', 'markers', 'glue','ruler']

您必须保留 set 个已经看过的项目才能找到独特的项目。一个简单的实现是:

item_list = ['book', 'pen']
output = [['pencil', 'eraser', 'pen', 'glue', 'folders'],
          ['notepad', 'book', 'pencil', 'markers', 'ruler', 'scissors']]

already_seen = set(item_list)
new_output = []
for sublist in output:
  new_sublist = [item for item in sublist if item not in already_seen]
  new_output.extend(new_sublist[:3])
  already_seen |= set(new_sublist[:3])

print(new_output)

输出:

['pencil', 'eraser', 'glue', 'notepad', 'markers', 'ruler']