使用 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
给定一个包含 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