#python
#python
Вопрос:
Я хочу написать цикл for в python, который повторяется, например, как 111, 112, 113, 114, 121, 122, 123, 124, 131,.. до 444. Есть ли эффективный способ сделать это?
Я попытался преобразовать между десятичной и базовой 4-й системой, но есть ли лучший способ сделать это?
Комментарии:
1. Вы имеете в виду
range(111, 445)
?2. нет, мне не нужны такие числа, как 115, 116, 117. он должен повторяться только до 4 и начинаться заново
3. Почему бы вам просто не составить список, поскольку вам нужно всего 16 номеров?
4. это всего лишь пример, в нем может быть до миллиона позиций (от 11 ….. от 1 до 44 ….4), и перебирать числа, которые мне не нужны, неэффективно.
Ответ №1:
>>> from itertools import chain
>>> for k in chain.from_iterable(range(i 1, i 5) for i in range(110, 450, 10)):
... print(k)
...
111
112
113
114
121
122
123
124
131
132
133
134
141
142
.
.
.
423
424
431
432
433
434
441
442
443
444
Ответ №2:
ИТАК, вот так:
[ i for i in range(111, 445) if '0' < str(i)[-1] < '5']
Ответ №3:
вы можете использовать:
[ i for i in range(111, 445) if 0< i%(i-i%10) <5]
Ответ №4:
Вы можете преобразовать диапазон целых чисел в основание 4, используя base_repr
из numpy
:
import numpy
for i in range(64):
print(int(numpy.base_repr(i, base=4)) 111)
Вывод:
111
112
113
114
121
122
123
124
131
132
133
134
141
142
143
144
211
212
213
214
221
222
223
224
231
232
233
234
241
242
243
244
311
312
313
314
321
322
323
324
331
332
333
334
341
342
343
344
411
412
413
414
421
422
423
424
431
432
433
434
441
442
443
444