2012-06-16 17 views
33

¿Cómo puedo generar la secuencia de números "1,2,5,6,9,10 ......" y hasta 100 en Python? Incluso necesito la coma (',') incluida, pero este no es el problema principal.Generar una secuencia de números en Python

la secuencia: cada número de 1..100, divisible por 4 con resto 1 ó 2.

Respuesta

32

Cada número de 1,2,5,6,9,10 ... es divisible por 4 con resto 1 ó 2.

>>> ','.join(str(i) for i in xrange(100) if i % 4 in (1,2)) 
'1,2,5,6,9,10,13,14,...' 
+0

Un Python 3 la versión es proporcionada por Oleh Prypin – ratskin

10

incluye algunas adivinanzas en la secuencia exacta que usted está esperando:

>>> l = list(range(1, 100, 4)) + list(range(2, 100, 4)) 
>>> l.sort() 
>>> ','.join(map(str, l)) 
'1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65,66,69,70,73,74,77,78,81,82,85,86,89,90,93,94,97,98' 

Como una sola línea:

>>> ','.join(map(str, sorted(list(range(1, 100, 4))) + list(range(2, 100, 4)))) 

(por cierto. esto es compatible con Python 3)

15
>>> ','.join('{},{}'.format(i, i + 1) for i in range(1, 100, 4)) 
'1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65,66,69,70,73,74,77,78,81,82,85,86,89,90,93,94,97,98' 

Esa era una solución rápida y bastante sucia.

Ahora, una solución que es adecuada para diferentes tipos de problemas de progresión:

def deltas(): 
    while True: 
     yield 1 
     yield 3 
def numbers(start, deltas, max): 
    i = start 
    while i <= max: 
     yield i 
     i += next(deltas) 
print(','.join(str(i) for i in numbers(1, deltas(), 100))) 

Y aquí son ideas similares implementados utilizando itertools:

from itertools import cycle, takewhile, accumulate, chain 

def numbers(start, deltas, max): 
    deltas = cycle(deltas) 
    numbers = accumulate(chain([start], deltas)) 
    return takewhile(lambda x: x <= max, numbers) 

print(','.join(str(x) for x in numbers(1, [1, 3], 100))) 
+0

One liner, gracias! ¡Eso es muy agradable!Inicialmente pensé en algo de esto 'odd = []' 'even = []' 'para c en el rango (0,100):' 'si c% 2 == 0:' 'odd.append (c)' 'para c en el rango (0100):' 'si c% 2 == 1:' 'even.append (c)' 'para c en el rango (0, 50):' 'si c % 2 == 0: ' ' de impresión (incluso [c], final = "") ' 'cosa:' ' de impresión (impar [c], final = "")' Sí, soy una recién llegado. ¡Pero sabía que debía haber mejores formas! ¡Gracias chicos! – user1460818

0

Suponiendo que he adivinado correctamente el patrón (Alternando incrementos de 1 y 3), esto debería producir el resultado deseado:

def sequence(): 
    res = [] 
    diff = 1 
    x = 1 
    while x <= 100: 
     res.append(x) 
     x += diff 
     diff = 3 if diff == 1 else 1 
    return ', '.join(res) 
0

Asumiendo que su secuencia alterna incrementos de entre 1 y 3

numbers = [1] 
while numbers[-1] < 100: 
    numbers.append(numbers[-1] + 1) 
    numbers.append(numbers[-1] + 3) 

print ', '.join(map(str, numbers)) 

esto podría ser más fácil de modificar si su secuencia es diferente, pero creo que empuje o BlaXpirit son respuestas más bonito que la mía.

-1

en Python 3.1 se puede producir una lista de una manera

 lst=list(range(100)) 
    for i in range(100) 
     print (lst[i],',',end='') 

en Python 2.7 que puede hacerlo como

 lst=range(100) 
    for i in range(100) 
     print lst[i]+',' 
+0

¿Por qué itera sobre un objeto de rango separado? Debería iterar sobre los elementos de la lista. – poke

0

Esto funciona mediante la explotación de las propiedades% de la lista en lugar de la incrementos

for num in range(1,100): 
    if num % 4 == 1 or num % 4 ==2: 
     n.append(num) 
     continue 
    pass 
0

usando numpy y comprensión de lista, puede hacer lo

import numpy as np 
[num for num in np.arange(1,101) if (num%4 == 1 or num%4 == 2)] 
-1

Escribir una función que toma un número como argumento e imprime la serie de Fibonacci hasta ese número

def Series(n): 
    a = 0 
    b = 1 
    print(a) 
    print(b) 
    S = 0 
    for i in range(0,n): 
     if S <= n-1: 
      S = a + b 
      print(S) 
      a = b 
      b = S 
Cuestiones relacionadas