эффективный способ застегнуть эти петли - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь использовать oop по нескольким спискам, и я наконец получил желаемый результат, но это кажется мне довольно неэффективным, и я уверен, что должен быть лучший способ сделать это. Есть ли кто-нибудь, кто мог бы сказать мне «лучший / самый эффективный» способ получить такие же результаты?

quarters_after_event = ['', '+15', '+30', '+45', '+60', '+75', '+90', '+105', '+120']
ranges = [range(5), range(5, 10), range(10, 15), range(15, 20), range(20, 25), range(25, 30), range(30, 35), range(35, 40), range(40, 45)]


for indices, quarter_after_event in zip(ranges, quarters_after_event):
    for index in indices:
        print(index, quarter_after_event)

результат:

0 
1 
2 
3 
4 
5 +15
6 +15
7 +15
8 +15
9 +15
10 +30
11 +30
12 +30
13 +30
14 +30
15 +45
16 +45
17 +45
18 +45
19 +45
20 +60
21 +60
22 +60
23 +60
24 +60
25 +75
26 +75
27 +75
28 +75
29 +75
30 +90
31 +90
32 +90
33 +90
34 +90
35 +105
36 +105
37 +105
38 +105
39 +105
40 +120
41 +120
42 +120
43 +120
44 +120

Ответы [ 3 ]

3 голосов
/ 25 мая 2020

Что ж, в вашем коде нет ничего плохого, но вы также можете сделать:

for i in range(45):
   q = i//5
   value = f'+{q*15}' if q>0 else ''
   print(i, value)
1 голос

Вы могли бы,

quarters_after_event = ['', '+15', '+30', '+45', '+60', '+75', '+90', '+105', '+120']

for i in range(45):
    print('{}{}'.format(i, quarters_after_event[i//5]))
#output
# 0
# 1
# 2
# 3
# 4
# 5+15
# 6+15
# 7+15
# 8+15
# 9+15
# 10+30
# 11+30
# 12+30
# 13+30
# 14+30
# 15+45
# 16+45
# 17+45
# 18+45
# 19+45
# 20+60
# 21+60
# 22+60
# 23+60
# 24+60
# 25+75
# 26+75
# 27+75
# 28+75
# 29+75
# 30+90
# 31+90
# 32+90
# 33+90
# 34+90
# 35+105
# 36+105
# 37+105
# 38+105
# 39+105
# 40+120
# 41+120
# 42+120
# 43+120
# 44+120

На самом деле вам не нужен список,

for i in range(45):
    print(i, '' if i<5 else '+ {}'.format(15 * (i//5)))
#output
# 0 
# 1 
# 2 
# 3 
# 4 
# 5 + 15
# 6 + 15
# 7 + 15
# 8 + 15
# 9 + 15
# 10 + 30
# 11 + 30
# 12 + 30
# 13 + 30
# 14 + 30
# 15 + 45
# 16 + 45
# 17 + 45
# 18 + 45
# 19 + 45
# 20 + 60
# 21 + 60
# 22 + 60
# 23 + 60
# 24 + 60
# 25 + 75
# 26 + 75
# 27 + 75
# 28 + 75
# 29 + 75
# 30 + 90
# 31 + 90
# 32 + 90
# 33 + 90
# 34 + 90
# 35 + 105
# 36 + 105
# 37 + 105
# 38 + 105
# 39 + 105
# 40 + 120
# 41 + 120
# 42 + 120
# 43 + 120
# 44 + 120
1 голос
/ 25 мая 2020

Насколько я понимаю, quarters_after_event - это ваши входные данные, и вы хотите повторять каждые 5 раз.

Вы можете использовать enumerate и немного математики, чтобы избавиться от ranges. Здесь я повторяю только дважды для более короткого вывода:

quarters_after_event = ['', '+15', '+30', '+45', '+60', '+75', '+90', '+105', '+120']
repeat = 2

for i, q in enumerate(quarters_after_event):
    start = i * repeat
    for j in range(start, start+repeat):
        print(j, q)

Вывод:

0 
1 
2 +15
3 +15
4 +30
5 +30
6 +45
7 +45
8 +60
9 +60
10 +75
11 +75
12 +90
13 +90
14 +105
15 +105
16 +120
17 +120
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...