2009-09-27 9 views
1

J'ai besoin d'une bonne fonction pour faire cela en python.Liste des listes en python?

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]] 

Répondre

9
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 
8
def foo(n): 
    i = 1 
    while i <= n: 
     last = int(i * 1.5 + 1) 
     yield range(i, last) 
     i = last 

list(foo(3)) 

Quel comportement vous attendez-vous lorsque vous utilisez un numéro pour n qui ne fonctionne pas, comme 9?

1

Un de plus, juste pour le plaisir:

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] 

(Cela ne repose pas sur la liste sous-jacente ayant les numéros 1..n)

+0

ce qui est ls et où est-il déclaré – Edwards

5

Adapté de la réponse de gs mais sans le mystérieux « 1,5 ".

def foo(n): 
    i = c = 1 
    while i <= n: 
     yield range(i, i + c) 
     i += c 
     c += 1 

list(foo(10)) 
3

Ce n'est probablement pas un cas où la compréhension des listes est appropriée, mais je m'en fous!

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

+ 1, pour la pire solution (toujours comme si ...) –

+0

Nb. ∞, c'est moi. – outis

1

Voici mon entrée de golf de python:

>>> 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]] 
>>> 

Le calcul de x repose sur la solution de l'équation du second degré avec des racines positives pour

0 = y*y + y - 2*n 
Questions connexes