1
votes

Comment diviser la liste de nombres en sous-liste qui dépendent de la plage

Je suis juste curieux de savoir s'il existe un moyen de diviser la liste des nombres en utilisant sa propre plage? Exemple:

splited_list = [[0,1],[1,2],[2,3],[5,6],[6,7]]

à

original_list = [[0,3],[5,7]]


0 commentaires

3 Réponses :


2
votes

Essayez ceci:

original_list = [[0,3],[5,7]]
splitted_list = []

for rangeDef in original_list: ## for each range definition
    for i in range(rangeDef[0], rangeDef[1]): ## for each pair of numbers within that range
        splittedList.append([i, i + 1])


0 commentaires

2
votes

Approche simple et courte (avec range code > ):

[[0, 1], [1, 2], [2, 3], [5, 6], [6, 7]]

La sortie:

orig_list = [[0,3],[5,7]]
res = [[i, i+1] for a, b in orig_list for i in range(a, b)]
print(res)


2 commentaires

Vous pouvez également décompresser les limites de la plage comme ceci: [[i, i + 1] pour a, b dans orig_list pour i dans plage (a, b)] . Ou rendez-le plus golfique avec [[i, i + 1] for r in orig_list for i in range (* r)]


@Norrius, oui, faisons-le



0
votes

Vous pouvez également utiliser une compréhension de liste avec zip :

[[0, 1], [1, 2], [2, 3], [5, 6], [6, 7]]

Output:

l = [[0,3],[5,7]]
new_l = [[a, b] for c, d in l for a, b in zip(range(c, d+1), range(c, d+1)[1:])]


0 commentaires