【问题标题】:How to delete those 1D lists within a 2D list which contains with duplicate 1st element?如何删除包含重复第一个元素的 2D 列表中的那些 1D 列表?
【发布时间】:2021-07-28 16:22:33
【问题描述】:

假设我有一个 2D 列表(仅包含浮点数)-

a=[[1,2],[1,3],[2,5],[4,3],[3,4],[4,9]] 我想删除那些具有共同第一个元素并稍后出现的一维列表。例如 - 第一个列表 [1,2] 包含 1 作为第一个元素,因此删除具有第一个元素 1 的下一个列表,在这种情况下是第二个列表 [1,3],然后我们取 [2,5] ,[4,3],[3,4] 像往常一样,但由于我们已经采用了 [4,3],因此我们不会采用具有共同第一个元素 4 的 [4,9]。

所以最终的输出应该是-

[[1,2],[2,5],[4,3],[3,4]]

如何在 Python 中做到这一点?我可以想到一些嵌套的 for 循环和一堆 if else 语句,这显然是低效的,我希望 set/map/zip 函数有一个技巧,它更 Pythonic。

【问题讨论】:

  • 您应该尝试编写一些代码并展示它。如果它效率低下也没关系,但你应该显示 something。一个简单的迭代和 seen=set() 实际上应该可以正常工作。
  • 我会在阅读您的评论后这样做,但你们回复的速度太快了! :-) 无论如何,我的代码在用户 KnowledgeGainer 的回答中。

标签: python arrays list python-2.7


【解决方案1】:

使用set() 过滤掉重复项:

a = [[1, 2], [1, 3], [2, 5], [4, 3], [3, 4], [4, 9]]

out, seen = [], set()
for item in a:
    if not item[0] in seen:
        seen.add(item[0])
        out.append(item)

print(out)

打印:

[[1, 2], [2, 5], [4, 3], [3, 4]]

【讨论】:

  • 正是我想要的!
【解决方案2】:
a=[[1,2],[1,3],[2,5],[4,3],[3,4],[4,9]]
k=[]
[a.remove(i) if i[0] in k else k.append(i[0]) for i in a]
print(a)

【讨论】:

  • 这应该可以工作,但它是令人困惑的代码,因为你正在创建一个列表,使用列表理解语法,你不关心,只是扔掉。如果您只是要丢弃由推导式创建的列表,最好使用常规 for 循环。
  • 我同意你的观点,虽然我试图减少代码行数,但可以通过常规 for 循环来完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
相关资源
最近更新 更多