파이썬에서이 작업을 수행하려면 좋은 함수가 필요합니다.파이썬 목록 목록?
def foo(n):
# do somthing
return list_of_lists
>> foo(6)
[[1],
[2,3],
[4,5,6]]
>> foot(10)
[[1],
[2,3],
[4,5,6]
[7,8,9,10]]
파이썬에서이 작업을 수행하려면 좋은 함수가 필요합니다.파이썬 목록 목록?
def foo(n):
# do somthing
return list_of_lists
>> foo(6)
[[1],
[2,3],
[4,5,6]]
>> foot(10)
[[1],
[2,3],
[4,5,6]
[7,8,9,10]]
def foo(n):
lol = [ [] ]
i = 1
for x in range(n):
if len(lol[-1]) >= i:
i += 1
lol.append([])
lol[-1].append(x)
return lol
def foo(n):
i = 1
while i <= n:
last = int(i * 1.5 + 1)
yield range(i, last)
i = last
list(foo(3))
는 9처럼 작동하지 않습니다 n
의 번호를 사용할 때 어떤 행동을 기대합니까? 단지 재미를 위해
하나 더 :
def lol(n):
entries = range(1,n+1)
i, out = 1, []
while len(entries) > i:
out.append([entries.pop(0) for x in xrange(i)])
i += 1
return out + [entries]
GS의 대답에서하지만 1.5 "신비없이 적응
(이 숫자의 1..N을 갖는 기본 목록에 의존하지 않는다) ".
def foo(n):
i = c = 1
while i <= n:
yield range(i, i + c)
i += c
c += 1
list(foo(10))
이것은 아마도 목록 내포가 적절한 경우가 아니지만 상관하지 않습니다.
from math import ceil, sqrt, max
def tri(n):
return n*(n+1) // 2
def irt(x):
return int(ceil((-1 + sqrt(1 + 8*x))/2))
def foo(n):
return [list(range(tri(i)+1, min(tri(i+1)+1, n+1))) for i in range(irt(n))]
선언되는 경우 + 1, 최악의 해결책 (여전히 그래도 좋아 ...) –
Num. ∞, 나야. – outis
가 여기 내 파이썬 골프 항목입니다 :
>>> def foo(n):
... def lower(i): return 1 + (i*(i-1)) // 2
... def upper(i): return i + lower(i)
... import math
... x = (math.sqrt(1 + 8*n) - 1) // 2
... return [list(range(lower(i), upper(i))) for i in range(1, x+1)]
...
>>>
>>> for i in [1,3,6,10,15]:
... print i, foo(i)
...
1 [[1]]
3 [[1], [2, 3]]
6 [[1], [2, 3], [4, 5, 6]]
10 [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
15 [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15]]
>>>
X의 계산에 대한 긍정적 인 뿌리를 가진 차 방정식의 솔루션에 의존
0 = y*y + y - 2*n
뭐죠 LS하고 – Edwards