Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从列表中打印出唯一的模式_Python_List_Unique_Traversal - Fatal编程技术网

使用Python从列表中打印出唯一的模式

使用Python从列表中打印出唯一的模式,python,list,unique,traversal,Python,List,Unique,Traversal,给定一个由n个整数组成的数组nums,nums中是否有元素a、b、c使得a+b+c=0?查找数组中所有唯一的三元组,该数组的和为零 请注意,解决方案集不能包含重复的三元组 下面是我查找三元组的代码。我找不到删除重复三元组模式的解决方案 假设I/p为-10 1 0 输出必须只有[-1,0,1]],但我得到的是[[1,-1,0],[0,-1,1]]……有什么想法吗 class Solution: def threeSum(self, nums): resul

给定一个由n个整数组成的数组nums,nums中是否有元素a、b、c使得a+b+c=0?查找数组中所有唯一的三元组,该数组的和为零

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

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

假设I/p为-10 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的文章类似,如果你对数组的每个值进行排序,如果你知道我的意思,那么具有相同值的值将是相同的。要对值进行排序,如果使用sortedelement,则只需执行以下操作

以下是我对列表中每个元素的排序方式:

已排序的_列表=[] 就我而言,结果是: 已排序的\u list.appendsortedi 这会将i的排序值添加到结果中每个项目的新列表中。然后,我们所要做的就是去掉重复的

以下是我删除重复项的方式:

唯一_列表=[] 对于排序列表中的i: 如果我不在唯一列表中: 唯一_list.appendi 总而言之,我将这样编写函数threeSum:

定义三个sumnums: 结果=[] 对于范围2中的i,lennums: i、 j和k将是指向列表的指针 k=i-1 j=i-2 对于范围为k,0,-1的k: 对于范围为j,-1,-1的j: 验证总和是否为0 如果j这是leetcode提出的一个问题:是的,这是一个实践问题……尽管网站上有很多解决方案只是试图解决我代码的最后一部分:-leetcode在网站上有讨论。这里的信息比你在这里得到的要多。谢谢,这段代码在某些测试用例中仍然失败。它可以对[-1,0,1]、-1,1,0]进行排序,但不能在[[1,-1,0]、[1,0,-1]]上进行排序。请尝试编辑,并让我知道此操作有效。感谢其他人注意,这不是一个优化的解决方案,因为这需要^3。可以用BST试试