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']
我有一个项目列表,它输出一个列表列表:
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']