比较1列2D数组并删除重复的Python

时间:2017-01-22 13:33:28

标签: python multidimensional-array duplicates

说我有一个2D数组:

array = [['abc',2,3,],
        ['abc',2,3],
        ['bb',5,5],
        ['bb',4,6],
        ['sa',3,5],
        ['tt',2,1]]

我想删除第一列重复的任何行 即比较数组[0]并仅返回:

removeDups = [['sa',3,5],
        ['tt',2,1]]

我认为应该是这样的: (将first col设置为tmp变量,将tmp与剩余和比较返回的#set数组进行比较)

for x in range(len(array)):
    tmpCol = array[x][0] 
    del array[x] 
    removed = compare(array, tmpCol) 
    array = copy.deepcopy(removed) 

print repr(len(removed))  #testing 

比较是: (将每个剩余数组项的第一个col与tmp进行比较,如果匹配则删除else返回原始数组)

def compare(valid, tmpCol):
for x in range(len(valid)):
    if  valid[x][0] != tmpCol:
        del valid[x]
        return valid
    else:
        return valid

我一直在超出范围'错误。我已尝试过其他方法,但我真的很感激一些帮助!

3 个答案:

答案 0 :(得分:1)

您可以尝试的一个选项是先预先为数组的第一列创建一个计数器,然后根据计数值过滤列表,即仅在第一个元素只出现一次时保留该元素:

from collections import Counter

count = Counter(a[0] for a in array)
[a for a in array if count[a[0]] == 1]
# [['sa', 3, 5], ['tt', 2, 1]]

答案 1 :(得分:0)

您可以使用字典并计算每个键的出现次数。 您还可以使用实际执行此操作的库集合中的Counter

请执行以下操作:

from collection import Counter

removed = []
for k, val1, val2 in array:
    if Counter([k for k, _, _ in array])[k]==1:
        removed.append([k, val1, val2])

答案 2 :(得分:0)

与其他答案类似,但使用字典而不是导入计数器:

                        String input = master_string;
                        Hashtable<String, int[]> result = new Hashtable<String, int[]>();
                        Pattern pattern = Pattern.compile("([A-Z]+):(\\d+(?:,\\d+)*)");
                        Matcher matcher = pattern.matcher(input);

                        while (matcher.find())
                        {
                            String key = matcher.group(1);
                            String[] fields = matcher.group(2).split(",");

                            int[] values = new int[fields.length];
                            for (int pqr=0; pqr<values.length; pqr++)
                            {
                                values[pqr] = Integer.parseInt(fields[pqr]);
                                // values[pqr] = fields[pqr];
                            }
                            result.put(key, values);
                        }