Ich würde gerne eine liste der Länge X erstellen, die nur Nullen enthällt. An jeder y-ten stelle möge eine 1 stehen. Quasi so:
X=15
y=3
Code???
print (list)
[001001001001001]
Vielen Dank im voraus.
Euer morila
List erstellen
Auch auf die Gefahr hin, dass ich hier 'ne Hausaufgabe löse… mich hat's in den Fingern gejuckt:
Code: Alles auswählen
In [24]: x, y = 15, 3
In [25]: [e + (0 if i % y else 1) for i, e in enumerate([0] * x, 1)]
Out[25]: [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Sachen gibt's…Morila hat geschrieben:Den Zähler einer cnc fräse.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
`[0] * x` mit itertools.repeat ersetzen, die LC mit einer Generator Expression austauschen und dann funktioniert das Ganze auch für ziemlich große x.
Untested:
Untested:
Code: Alles auswählen
gen = ((0 if i % y else 1) for i, _ in enumerate(repeat(0, x), 1))
the more they change the more they stay the same
Das mit dem Wiederholen der Null kann man sich komplett sparen, wenn man einfach `range()` benutzt:
Code: Alles auswählen
[(0 if i % y else 1) for i in range(1, x + 1)]
@Dav1d & snafu
Geil… ← Sorry, aber das musste jetzt mal gesagt werden!
Geil… ← Sorry, aber das musste jetzt mal gesagt werden!
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Code-Obfuscation with generators and many (many) parenthesis
Code: Alles auswählen
beeper = lambda x: ((0 if i % x else 1) for i in itertools.count(1))
take = lambda n, xs: (e for _, e in zip(range(n), xs))
print(list(take(15, beeper(3))))
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Eine andere Möglichkeit:
Code: Alles auswählen
from itertools import cycle, islice
islice(cycle([0] * (y - 1) + [1]), x)
Ihr wollt' mich jetzt bloß ärgern… aber wenn ich groß bin, dann
zahl' ich euch das heim!
zahl' ich euch das heim!
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Hab auch noch eins, inspiriert von snafu:
Natürlich ist das mit der Division nicht optimal, also lieber die Lösung von snafu .
Code: Alles auswählen
>>> list(chain.from_iterable(repeat([0] * (y - 1) + [1], x//y)))
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]
the more they change the more they stay the same
Noch eins!
Code: Alles auswählen
islice(chain.from_iterable(izip(*(([repeat(0)]*(y-1)) + [repeat(1)]))), x)
the more they change the more they stay the same
Nunja "aufbauen" wäre wohl eher ersetzenBlackJack hat geschrieben:@bwbg: `take()` würde ich auf `itertools.islice()` aufbauen.
Code: Alles auswählen
beeper = lambda x: ((0 if i % x else 1) for i in itertools.count(1))
print(list(itertools.islice(beeper(3), 0, 15)))
Das kommt jetzt schon sehr nah an eine (un)mögliche Brainfuck-Lösung.Dav1d hat geschrieben:Noch eins!Code: Alles auswählen
islice(chain.from_iterable(izip(*(([repeat(0)]*(y-1)) + [repeat(1)]))), x)
Ich bevorzuge persönlich die vollständige Generatorlösung. So kann man sehr lange fräsen ...
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Das ist im grunde das Gleiche wie die Lösung von snafu, man kann auch hier unendlich lange Fräsen, das einzige was ein Problem werden kann ist ein großes `y`.bwbg hat geschrieben:Das kommt jetzt schon sehr nah an eine (un)mögliche Brainfuck-Lösung.Dav1d hat geschrieben:Noch eins!Code: Alles auswählen
islice(chain.from_iterable(izip(*(([repeat(0)]*(y-1)) + [repeat(1)]))), x)
Ich bevorzuge persönlich die vollständige Generatorlösung. So kann man sehr lange fräsen ...
z.B. y = 5: `islice(chain.from_iterable(izip(*[repeat(0), repeat(0), repeat(0), repeat(0), repeat(1)])), x)`
`x` kann beliebig groß sein.
(Eigentlich ist `[repeat(0), repeat(0), repeat(0), repeat(0), repeat(1)]` ein `tmp1 = repeat(0); [tmp1, tmp1, tmp1, tmp1, repeat(1)]`)
the more they change the more they stay the same
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Code: Alles auswählen
>>> x=15
>>> y=3
>>> ([0]*(y-1)+[1])*(x//y)+[0]*(x%y)
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]
Eine andere Möglichkeit wäre
Code: Alles auswählen
(([0]*(y-1)+[1])*-(-x//y))[:x]
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw