【问题标题】:Removing duplicate tuples from a list从列表中删除重复的元组
【发布时间】:2018-12-25 13:32:38
【问题描述】:

考虑以下元组列表。

x = [[(1, 31), (3, 22), (29, 23), (31, 1)], [(32, 0), (34, 44), None, (44, 34)]]

在此列表中,我的值如 (1,31)(31,1) 对我而言是等效的。因此,我需要从 x 创建一个仅包含唯一值的列表。如何做到这一点?天真地,我尝试通过从x 创建一个新列表来解决这个问题,条件是如果元组中的第一个值大于第二个,则不要将值添加到列表中,否则添加值。但是,可以看出(29,23) 不满足此条件,但所有其他值都满足。

Edit1:所需的输出应为以下形式。每个子列表必须仅包含上述标准定义的唯一值:

y = [[(1, 31), (3,22), (29,23)], [(32,0), (34,44), None, ]]

【问题讨论】:

  • 在每个子列表中唯一,还是在整个列表中唯一?你能发布想要的输出吗?

标签: python python-3.x list duplicates tuples


【解决方案1】:

您可以像这样使用列表推导(假设您希望将逻辑应用于列表的每个子列表):

ordered_x = [[tuple(sorted(y)) if isinstance(y,tuple) else y for y in sublist] for sublist in x]
new_x = [list(set(sublist)) for sublist in ordered_x]

print(new_x)
>>> [[(23, 29), (3, 22), (1, 31)], [(0, 32), None, (34, 44)]]

如果您希望从所有子列表的元素集合中删除所有重复项,请使用以下命令:

ordered_x = [tuple(sorted(y)) if isinstance(y,tuple) else y for sublist in x for y in sublist]
new_x = list(set(ordered_x))

print(new_x)
>>> [(0, 32), (3, 22), (23, 29), None, (34, 44), (1, 31)]

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多