在另一个列表中添加重复项

Add the duplicate in another list

我想将一个列表中的重复项放在另一个列表中。在下面的示例中,我试图创建一个列表 red_dup,其中包含每个包含重复的 'red' id 的项目。同样,我想对 food_dup 列表中的每种食物执行相同的操作。

我有:

values = [[1, 'red1', 'food4'], [1, 'red2', 'food4'], [1, 'red1', 'food9']]

我要的结果:

red_dup = [[1, 'red1', 'food4'], [1, 'red1', 'food9']]
food_dup = [[1, 'red1', 'food4'], [1, 'red2', 'food4']]

在我的代码中,“值”来自 class 的生成器函数。

函数returns这些values.

1为距离,红色或蓝色为实体与食物的距离

This是什么代码returns。红色下划线为X、Y坐标。

您可以使用字典来存储和过滤重复值

from collections import defaultdict
res = defaultdict(list)
for item in values:
    _, color, food = item 
    res[color].append(item)
    res[food].append(item)
    

[v for v in res.values() if len(v) > 1]

结果:

[[[1, 'red1', 'food4'], [1, 'red1', 'food9']],
 [[1, 'red1', 'food4'], [1, 'red2', 'food4']]]

这是我的建议:

values = [[1, 'red1', 'food4'], [1, 'red2', 'food4'], [1, 'red1', 'food9']]

red_dup = []
food_dup = []

for i in values:
    red=[k for k in values if k[1]==i[1]]
    if len(red)>1:
        red_dup.extend(red)
    food = [k for k in values if k[2]==i[2]]
    if len(food)>1:
        food_dup.extend(food)

red_dup=sorted(red_dup, key=lambda x: [x[1], x[2]])[::2]
food_dup=sorted(food_dup, key=lambda x: [x[2], x[1]])[::2]

>>>print(red_dup)
#[[1, 'red1', 'food4'], [1, 'red1', 'food9']]
>>>print(food_dup)
#[[1, 'red1', 'food4'], [1, 'red2', 'food4']]