为了账号安全,请及时绑定邮箱和手机立即绑定

子列表的唯一元素取决于子列表中的特定值

子列表的唯一元素取决于子列表中的特定值

哈士奇WWW 2022-07-26 16:34:32
我试图从一个非常不一致的列表中选择唯一的数据集。我的数据集 RawData 由不同长度的字符串项组成。有些项目出现多次,例如:比较['a','b','x','15/30']项目 的关键始终是最后一个字符串:例如'15/30'目标是:获取一个列表:UniqueData,其中包含仅出现一次的项目。(我想保持订单)数据集:RawData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['a','x','c','15/30'],['i','j','k','l','m','n','o','p','20/60'],['x','b','c','15/30']]我想要的解决方案数据集:UniqueData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['i','j','k','l','m','n','o','p','20/60']]我尝试了许多可能的解决方案,例如:for index, elem in enumerate(RawData):并附加到一个新列表,如果......for element in list不起作用,因为项目不完全相同。你能帮我找到解决问题的方法吗?
查看完整描述

4 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

删除重复项的最佳方法是将它们添加到集合中。将最后一个元素添加到setas 以跟踪所有唯一值。当您要添加的值已经存在于集合中unique时,如果不存在则不执行任何操作,添加要设置的值unique并将 lst 附加到结果列表中new。


尝试这个。


new=[]

unique=set()

for lst in RawData:

     if lst[-1] not in unique:

         unique.add(lst[-1])

         new.append(lst)


print(new)

#[['a', 'b', 'x', '15/30'],

 ['d', 'e', 'f', 'g', 'h', '20/30'],

 ['w', 'x', 'y', 'z', '10/10'],

 ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60']]


查看完整回答
反对 回复 2022-07-26
?
繁花如伊

TA贡献2012条经验 获得超12个赞

您可以为唯一数据设置一个新数组并跟踪您迄今为止看到的项目。然后,当您遍历数据时,如果您之前没有看到该列表中的最后一个元素,则将其附加到唯一数据并将其添加到已看到的列表中。


RawData = [['a', 'b', 'x', '15/30'], ['d', 'e', 'f', 'g', 'h', '20/30'], ['w', 'x', 'y', 'z', '10/10'],

           ['a', 'x', 'c', '15/30'], ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60'], ['x', 'b', 'c', '15/30']]

seen = []

UniqueData = []

for data in RawData:

    if data[-1] not in seen:

        UniqueData.append(data)

        seen.append(data[-1])


print(UniqueData)

输出


[['a', 'b', 'x', '15/30'], ['d', 'e', 'f', 'g', 'h', '20/30'], ['w', 'x', 'y', 'z', '10/10'], ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60']]


查看完整回答
反对 回复 2022-07-26
?
米脂

TA贡献1836条经验 获得超3个赞

使用集合过滤掉已经看到密钥的条目是最有效的方法。

这是一个使用具有内部副作用的列表理解的单行示例:

UniqueData = [rd for seen in [set()] for rd in RawData if not(rd[-1] in seen or seen.add(rd[-1])) ]



查看完整回答
反对 回复 2022-07-26
?
守候你守候我

TA贡献1802条经验 获得超10个赞

    RawData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['a','x','c','15/30'],['i','j','k','l','m','n','o','p','20/60'],['x','b','c','15/30']]


seen = []

seen_indices = []


for _,i in enumerate(RawData):

  # _ -> index

  # i -> individual lists

  if i[-1] not in seen:

   seen.append(i[-1])

  else:

   seen_indices.append(_)


for index in sorted(seen_indices, reverse=True):

    del RawData[index]


print (RawData)


查看完整回答
反对 回复 2022-07-26
  • 4 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信