英文:
How to remove excess brackets in a 3d list to make a 2d list?
问题
我正在解决一个名为3Sum的LeetCode问题,以下是我的代码:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
def twoSum(nums, target):
d = {
target - nums[0]: 0
}
for i in range(1, len(nums)):
if nums[i] in d:
return [nums[i], target - nums[i]]
else:
d[target-nums[i]] = i
arr = []
for i in range(len(nums)):
s = twoSum(nums[i+1:] + nums[:i], -nums[i])
if s == None:
continue
if s not in arr:
arr.append(s)
arr[len(arr) - 1].append(nums[i])
n = list(map(sorted, arr))
print(n)
res = []
[res.append(x) for x in n if x not in res]
return res
这不是最佳的解决方案,但我遇到了一个问题。我注意到我不能简单地将我的2Sum解决方案实现在这里,因为简单来说,2Sum问题保证只有一个解决方案,而3Sum可能有多个解决方案。因此,我想,不仅仅返回一个列表,而是返回一个二维列表,这样外部列表可以容纳多个解决方案。
然而,这引发了另一个问题,这也是我希望这个问题的答案能解决的问题。我将2Sum添加到arr
列表中。这样做后,arr
变成了一个三维列表,而我希望它是一个二维列表。
我想知道如何将这样的列表:arr = [[[3, 2, 9, 4], [1, 9, 5]], [3, 2, 2]]
变成这样的列表:arr = [[3, 2, 9, 4], [1, 9 ,5], [3, 2, 2]]
,以满足问题的要求。换句话说,如何仅删除使列表成为三维列表的括号,使其成为二维列表。arr
的数据类型是一个列表。
注意1:我理解在这个问题中,arr
的子数组只会有3个元素,但我想将它们泛化,以便这个问题的答案不仅适用于这个LeetCode问题。
注意2:我希望得到[[3, 2, 9, 4], [1, 9 ,5], [3, 2, 2]]
,而不是[[3, 2, 9, 4, 1, 9 ,5], [3, 2, 2]]
,因为第二个列表也删除了一些二维列表的括号。希望这样说得清楚。
另一个示例是arr
等于[[[5]], [3, 2, 3, 5, 10]]
。如果是这种情况,我想要将其变成[[5], [3, 2, 3, 5, 10]]
,以便它只是一个二维数组。
最后一个示例是[[[2, 6, 3, 1, 9], [3, 1, 99, 4]], [[4, 15], [4, 7, 2, 1]]]
。这将变成[[2, 6, 3, 1, 9], [3, 1, 99, 4], [4, 15], [4, 7, 2, 1]]
。
谢谢!
英文:
I am doing a leetcode problem named 3Sum: Here is my code:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
def twoSum(nums, target):
d = {
target - nums[0]: 0
}
for i in range(1, len(nums)):
if nums[i] in d:
return [nums[i], target - nums[i]]
else:
d[target-nums[i]] = i
arr = []
for i in range(len(nums)):
s = twoSum(nums[i+1:] + nums[:i], -nums[i])
if s == None:
continue
if s not in arr:
arr.append(s)
arr[len(arr) - 1].append(nums[i])
n = list(map(sorted, arr))
print(n)
res = []
[res.append(x) for x in n if x not in res]
return res
It isn't the greatest of solutions, but I ran into a problem. I noticed that I couldn't just implement my 2Sum solution into it because, to put it simply, while the 2Sum problem guarantees that there is only one solution, there could be many solutions for 3Sum. Therefore, I thought instead of just returning one list, how about a return a 2d list, so that the outer list can hold the many solutions.
However, that raised another problem, the one I hope the answer to this problem will solve. I'm then appending that 2Sum into the arr
list. In doing so, arr
becomes a 3d list, which I would like to be a 2d list.
I am wondering how to make a list like this: arr = [[[3, 2, 9, 4], [1, 9, 5]], [3, 2, 2]]
into a list like this: arr = [[3, 2, 9, 4], [1, 9 ,5], [3, 2, 2]]
, so that it meets the problem requirements. In other words, how to remove only the brackets that make the list a 3d list so that it becomes a 2d list. The data type of arr
is a list.
Notice1: I understand that in the problem, the subarrays of arr
would only have 3 elements each, but I would like to generalize it so that the answer to this question isn't specific to only this leetcode problem.
Notice2: I want [[3, 2, 9, 4], [1, 9 ,5], [3, 2, 2]]
instead of [[3, 2, 9, 4, 1, 9 ,5], [3, 2, 2]]
, because the second list also removes some brackets of the 2d lists. Hope that makes sense.
Another example is arr
being equal to [[[5]], [3, 2, 3, 5, 10]]
. If it were that case, I would like to make it [[5], [3, 2, 3, 5, 10]]
, so that it is only a 2d array.
One last example is [[[2, 6, 3, 1, 9], [3, 1, 99, 4]], [[4, 15], [4, 7, 2, 1]]]
. That would turn into [[2, 6, 3, 1, 9], [3, 1, 99, 4], [4, 15], [4, 7, 2, 1]]
.
Thank you!
答案1
得分: 7
循环遍历列表。如果元素是一个二维列表,就扩展结果以使其变平,否则将元素附加到结果。
data = [[[3, 2, 9], [1, 9, 5]], [3, 2, 2]]
result = []
for i in data:
if isinstance(i[0], list):
result.extend(i)
else:
result.append(i)
print(result)
英文:
Loop over the list. If an element is a 2d list, extend the result to flatten it, otherwise append the element onto the result.
data = [[[3, 2, 9], [1, 9, 5]], [3, 2, 2]]
result = []
for i in data:
if isinstance(i[0], list):
result.extend(i)
else:
result.append(i)
print(result)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论