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?

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top