使用 Python 从列表中打印出独特的模式

To print out unique patterns from a list using Python

给定一个包含 n 个整数的数组 nums,是否存在 nums 中的元素 a、b、c 使得 a + b + c = 0?找到数组中所有唯一的三元组,其总和为零。

请注意解决方案集不得包含重复的三元组。

下面是我找到三胞胎的代码。我找不到删除重复三胞胎模式的解决方案

假设 I/P 是 -1 0 1 0 输出只能是 [[-1,0,1]] 但我得到的是 [[1,-1,0],[0,-1,1]] ....有什么想法吗?

class Solution:
    def threeSum(self, nums):
        
        result = []
        
        for i in range (2, len(nums)):
            # i,j and k will be the pointers to the list
            k = i - 1
            j = i - 2
            for k in range (k, 0, -1):
                for j in range (j, -1, -1):

                    # verify if the summation is 0
                    if j < k and nums[i]+nums[j]+nums[k]== 0:
                        result.append([nums[i], nums[j], nums[k]])
    
        unique_list = []
        # logic to find unique list elements
        # this works only when the list patterns are same
        for x in result:
            if x not in unique_list:
                unique_list.append(x)
        
        return unique_list

你可以做到:

for x in result:
    if sorted(x, key=int) not in unique_list:
        unique_list.append(sorted(x, key=int))

return unique_list

像这样所有相同的(但排列的)三胞胎都设置为相同的排序,所以你不会得到它们两次。

回复用户评论:

result = [[-1, 0, 1], [-1, 1, 0]]

unique_list = []

for x in result:
    if sorted(x, key=int) not in unique_list:
        unique_list.append(sorted(x, key=int))

print (unique_list)

result = [[1, -1, 0], [1, 0, -1]]

unique_list = []

for x in result:
    if sorted(x, key=int) not in unique_list:
        unique_list.append(sorted(x, key=int))

print (unique_list)

输出:

[[-1, 0, 1]] #print 1
[[-1, 0, 1]] #print 2

类似于 Synthase 的 post,如果您对数组的每个值进行排序,具有相同值的值将相同,如果您明白我的意思的话。要对值进行排序,您只需使用 sorted(element).

这是我对列表中的每个元素进行排序的方式:

sorted_list = []

for i in result:
    sorted_list.append(sorted(i))

这会将 i 的排序值添加到结果中每个项目的新列表中。然后,我们所要做的就是去掉重复项。

我是这样删除重复项的:

unique_list = []

for i in sorted_list:
        if i not in unique_list:
            unique_list.append(i)

总而言之,这就是我编写函数 threeSum 的方式:

def threeSum(nums):
    
    result = []
    
    for i in range (2, len(nums)):
        # i,j and k will be the pointers to the list
        k = i - 1
        j = i - 2
        for k in range (k, 0, -1):
            for j in range (j, -1, -1):

                # verify if the summation is 0
                if j < k and nums[i]+nums[j]+nums[k]== 0:
                    result.append([nums[i], nums[j], nums[k]])

    sorted_list = []
    unique_list = []

    for i in result:
        sorted_list.append(sorted(i))

    for i in sorted_list:
        if i not in unique_list:
            unique_list.append(i)
    
    return unique_list