【发布时间】:2018-10-04 05:50:22
【问题描述】:
我想拆分一个列表并返回边界,因此在扩展中不应存在单个元素。
例如
split(list(range(1,101)),2)
# should return
[[1,50],[51,100]]
split(list(range(1,101)),3)
# should return
[[1,33],[34,66],[67,100]]
split(list(range(1,6)),3)
# should return
[[1,2],[3,5]] # Ideally last element should merge with last if last one has no pair.
到目前为止我尝试过
def split(l, n):
x = list(range(1, l+1))
return [x[i:i+n] for i in range(0, len(x), int(len(x)/n))]
print(split(20, 2))
返回[[1, 2], [11, 12]] 而不是[[1, 10], [11, 20]]
【问题讨论】:
-
这是因为,第一次 i 的值是 0 。因此,它将采用 x[0:2],因此该位置的值将分别为 1 和 2,对于下一个循环,它将是 11 和 12。我希望这将有助于您重新考虑逻辑部分。
-
我真的觉得你的预期结果对于其中一些是不正确的,如果不仅仅是不一致的话。
-
但是在你的问题中你分成了 3 个。
-
不应该
split(list(range(1,6)),3)给出 3 个拆分,而不是 2 个拆分? -
@pylang
range(1,6)==[1,2,3,4,5]- 如果分成 3,你会得到[ [1,2], [3,4]. [5,None]- 结果中不应该有“无范围”的 - 而是扩展之前的范围 - 因此[[1,2],[3,5]]
标签: python python-3.x list split