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