numpy 从由包含逗号分隔字符串的列表组成的列表中获取非重复值

xqkwcwgp  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(158)

主列表:

data = [
["629-2, text1, 12"],
["629-2, text2, 12"],
["407-3, text9, 6"],
["407-3, text4, 6"],
["000-5, text7, 0"],
["000-5, text6, 0"],
]

我想得到一个由唯一列表组成的列表,如下所示:

data_unique = [
["629-2, text1, 12"],
["407-3, text9, 6"],
["000-5, text6, 0"],
]

我尝试过使用numpy.unique,但我需要进一步帕雷它,因为我需要列表填充包含字符串开头的数字指示符的单一唯一版本的列表,即629-2...
我也尝试过从itertools使用chain,如下所示:

def get_unique(data):
    return list(set(chain(*data)))

但那只让我走到了numpy.unique
先谢谢你。

ttcibm8c

ttcibm8c1#

代码

from itertools import groupby

def get_unique(data):
    def designated_version(item):
        return item[0].split(',')[0]

    return [list(v)[0] 
            for _, v in groupby(sorted(data, 
                                       key = designated_version),
                                designated_version)
           ]

测试

print(get_unique(data))
# Output
[['629-2, text1, 12'], ['407-3, text9, 6'], ['000-5, text7, 0']]

说明

  • 按指定编号对数据进行排序(如果尚未排序)
  • 使用groupby按列表中每个项目的数字指示符的唯一版本进行分组,例如lambda item: item[0].split(',')[0]
  • 列表解析保留每个分组列表中的第一项,即list(v)[0]
h6my8fg2

h6my8fg22#

我已经用递归解决了这个问题!

def get_unique(lst):
        if not lst:
            return []
        if lst[0] in lst[1:]:
            return get_unique(lst[1:])
        else:
            return [lst[0]] + get_unique(lst[1:])

data = [
["629-2, text1, 12"],
["629-2, text2, 12"],
["407-3, text9, 6"],
["407-3, text4, 6"],
["000-5, text7, 0"],
["000-5, text6, 0"],
]
print(get_unique(data))

在这里,我将元素的最后一次出现存储在list中。

k3fezbri

k3fezbri3#

# Convert the list of lists to a set
data_set = set(tuple(x) for x in data)

# Convert the set back to a list
data_unique = [list(x) for x in data_set]

相关问题