【问题标题】:How to remove elements from a list of lists where an element is repeated?如何从重复元素的列表列表中删除元素?
【发布时间】:2020-09-26 19:07:28
【问题描述】:

我有一个列表列表

my_list = [["a", "b", "c"],
           ["d", "f", "g"],
           ["h", "b", "i"]]

我想删除 my_list 中 element[1] 不是唯一的所有元素。所以执行这个操作后的结果要么是

my_list = [["d", "f", "g"]] 

或者一个新的列表也可以使用

new_list = [["d", "f", "g"]]

我目前的方法是:

from collections import Counter

y_list = []

for element in my_list:
    x, y, z = element
    y_list.append(y)

count_dict = dict(Counter(y_list))

unique_y_list = []

for y, count in count_dict.items():
    if count == 1:
        unique_y_list.append(y)
 

valid_elements = []

for element in my_list:
    x, y, z = element
    if y in unique_y_list:
        valid_elements.append(element)

这可行,但似乎效率不高。帮助以更 Python 的方式实现我想要的结果?保持秩序并不重要。

【问题讨论】:

  • “元素[1] 不是唯一的”是什么意思。 ?
  • 我的意思是该元素的 index[1] 在 my_list 中多次出现的任何元素。 my_list [0] [1] == "b" ; my_list [2] [1] == "b" ;删除这些元素
  • 唯一无效的是你如何重新构造有效元素。不要创建列表,unique_list,并检查if y in unique_y_list:,而是使用if count_dict[y] == 1: valid_elements.append(element)
  • 另外,dict(Counter(y_list)) 是不必要的。 Counter 已经是一个字典
  • @juanpa.arrivillaga 谢谢!

标签: python list unique


【解决方案1】:

我会在索引 1 中创建一个 Counter 元素,然后用它来检查索引 1 处的每个列表元素是否唯一:

from collections import Counter
c = Counter(x[1] for x in my_list)
result = [l for l in my_list if c[l[1]] == 1]

【讨论】:

  • 这几乎就是 OP 正在做的事情。
  • @Mureinik 谢谢你,正是我想要的,更少的代码行
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 2017-09-03
  • 2018-01-01
  • 2015-01-05
  • 2020-08-02
  • 2020-11-02
  • 1970-01-01
相关资源
最近更新 更多