Como posso adicionar números não sequenciais a uma gama?
Pergunta
Eu estou tentando percorrer a gama (750, 765) e adicionar os números não sequenciais 769, 770, 774. Se eu tentar adicionar os números depois da função gama, ele retorna a lista de gama, então os números individuais :
>>> for x in range(750, 765), 769, 770, 774: print x
...
[750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764]
769
770
774
Como posso obter todos os números em uma única lista?
Solução
Use o built-in + operador para anexar seus números não sequenciais para o intervalo.
for x in range(750, 765) + [769, 770, 774]: print x
Outras dicas
Existem duas maneiras de fazê-lo.
>>> for x in range(5, 7) + [8, 9]: print x
...
5
6
8
9
>>> import itertools
>>> for x in itertools.chain(xrange(5, 7), [8, 9]): print x
...
5
6
8
9
itertools.chain () é de longe superior, uma vez que permite que você use iterables arbitrárias, em vez de listas apenas e listas. Também é mais eficiente, não necessitando lista cópia. E isso permite que você use xrange, que você deve quando looping.
As outras respostas nesta página irá atendê-lo bem. Apenas uma nota rápida que em Python3.0, range
é um iterador (como xrange estava em python2.x ... xrange se foi em 3,0). Se você tentar fazer isso em Python 3.0, certifique-se de criar uma lista a partir do iterator gama antes de fazer a adição:
for x in list(range(750, 765)) + [769, 770, 774]: print(x)
Você está procurando este:
mylist = range(750, 765)
mylist.extend([769, 770, 774])
Em python3, desde que você não pode adicionar uma lista para um intervalo, se por algum motivo, você não deseja importar itertool, você também pode fazer a mesma coisa manualmente:
for r in range(750, 765), [769, 770, 774]:
for i in r:
print(i)
ou
for i in [i for r in [range(750, 765), [769, 770, 774]] for i in r]:
print(i)