98 votes

Concaténation des résultats de deux fonctions d'intervalle

La fonction range permet-elle la concaténation ? Par exemple, je veux faire un range(30) & le concaténer avec range(2000, 5002) . Ma gamme concaténée sera donc 0, 1, 2, ... 29, 2000, 2001, ... 5001

Un code comme celui-ci ne fonctionne pas sur mon dernier python (ver : 3.3.0)

range(30) + range(2000, 5002)

4voto

Andreas Jung Points 1

range() dans Python 2.x renvoie une liste :

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

xrange() dans Python 2.x renvoie un itérateur :

>>> xrange(10)
xrange(10)

Et dans Python 3 range() renvoie également un itérateur :

>>> r = range(10)
>>> iterator = r.__iter__()
>>> iterator.__next__()
0
>>> iterator.__next__()
1
>>> iterator.__next__()
2

Il est donc clair que vous ne pouvez pas concaténer des itérateurs autrement qu'en utilisant chain() comme l'a souligné l'autre personne.

2voto

Tuchar Das Points 11

Vous pouvez utiliser la fonction de liste autour de la fonction d'intervalle pour établir une liste. COMME CELA

list(range(3,7))+list(range(2,9))

0voto

raphael Points 1011

Je suis arrivé à cette question parce que j'essayais de concaténer un nombre inconnu de plages, qui pouvaient se chevaucher, et je ne voulais pas de valeurs répétées dans l'itérateur final. Ma solution était d'utiliser set et le union comme suit :

range1 = range(1,4)
range2 = range(2,6)
concatenated = set.union(set(range1), set(range2)
for i in concatenated:
    print(i)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X