【发布时间】:2021-02-24 12:39:52
【问题描述】:
假设我有arr = [[1], [0, 0], [2], [3], [0, 0], [4]]
我是否可以将其扁平化为 [1, 0, 0, 2, 3, 0, 0, 4] 而无需使用 itertools、map/reduce 或列表组合?我正在努力寻找一种方法来做到这一点。谢谢。
这是我到目前为止尝试过的,这是一个 leetcode 问题:https://leetcode.com/problems/duplicate-zeros/
class Solution:
def duplicateZeros(self, arr: List[int]) -> None:
"""
Do not return anything, modify arr in-place instead.
"""
for ix in range(len(arr) - 2):
if arr[ix] == 0:
arr[ix] = [0, 0]
del arr[-1]
else:
l = []
l.append(arr[ix])
arr[ix] = l
# Output when you return arr is [[1],[0, 0],[2],[3],[0, 0],[4]]
【问题讨论】:
-
你为什么不想使用列表推导?这似乎是扁平化列表的最佳解决方案。
-
“无需使用 itertools、map/reduce 或 list comp”——这似乎很随意。为什么要排除这些工具?如果您知道其他可以使嵌套列表变平的方法,您是否也会排除这种情况?
-
到目前为止你有什么尝试?
-
您能指出为什么您不想使用列表推导、itertools 等吗?理解允许非常简单和 Pythonic 的解决方案:
[x for items in arr for x in items] -
任意排除使用的东西[检查] - 还没有代码[检查] - 作业?
标签: python arrays list flatten