Wunsch folgende Code verbessern:
Mein Code:
##############################################
n=3 # bis 20
tt0 = range(n,2*n)+range(2*n-2,n-1,-1)
print tt0
tt01 = [range(i) for i in tt0]
print tt01
print
tt02 = [(i, j) for i, j in enumerate(tt01)]
print tt02
tt1 = []
for i,k in tt02:
for j in k:
tt1 += [[i,j]]
print tt1
##########################################
Ergebnis:
[3, 4, 5, 4, 3]
[[0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 2]]
[(0, [0, 1, 2]), (1, [0, 1, 2, 3]), (2, [0, 1, 2, 3, 4]), (3, [0, 1, 2, 3]), (4, [0, 1, 2])]
[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [1, 3], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [3, 0], [3, 1], [3, 2], [3, 3], [4, 0], [4, 1], [4, 2]]
Wenn möglich ein 1 Comprehension.
Wenn ich im falschen Thema bin bitte Hinweis !
f.G.
ThorBenOdin
Verkürzung List Listcomprehension
Bitte benutz die Code Tags, sonst ist das Skript nicht entzifferbar. Und warum glaubst du wird es durch eine list comprehension besser? Gute Variablennamen zb wurden deutlich mehr helfen. Und LCs verbessern auch zb keine Performance. Falls du das annehmen solltest.
Ja klar kann man das in eine LC packen, ob das übersichtlicher wird, ist Geschmacksache. Erster Schritt wäre, die ganzen Zwischenschritte wegzulassen und alles (ohne LCs) in eine doppelte for-Schleife umzuwandeln; dabei benutzt man append, wenn man ein einzelnes Element an eine Liste anhängen will.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wie kommt man denn auf so etwas: ``tt1 += [[i,j]]``? Das ist einfach ein ``tt1.append([i, j])`` statt das Paar noch einmal unnötig in eine Liste zu verpacken die keiner braucht.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ohne die ganzen Zwischenschritte könnte man es so schreiben:
Rückportierung zu Python 2 sei dem Leser überlassen. 
Code: Alles auswählen
#!/usr/bin/env python3
from itertools import chain
def main():
n = 3
tt1 = [
[i, j]
for i, k in enumerate(
chain(range(n, 2 * n), reversed(range(n, 2 * n - 1)))
)
for j in range(k)
]
print(tt1)
assert tt1 == [
[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [1, 3], [2, 0],
[2, 1], [2, 2], [2, 3], [2, 4], [3, 0], [3, 1], [3, 2], [3, 3],
[4, 0], [4, 1], [4, 2]
]
if __name__ == '__main__':
main()

“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware