将副本添加到另一个列表中

2024-09-27 21:32:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个列表中的副本放到另一个列表中。在下面的示例中,我试图创建一个列表red_dup,其中包含每个包含重复的“红色”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']]

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

函数返回这些values

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

This是代码返回的内容。红色下划线是X,Y坐标


Tags: 函数代码距离列表food副本red食物
2条回答

您可以使用dict存储和筛选重复值

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']]

相关问题 更多 >

    热门问题