Не видел, чтобы кто-то предлагал мои обычные варианты:
less +F <file>
ctrl + c
/<search term>
<enter>
shift + f
Я предпочитаю это, потому что вы можете использовать ctrl + c
, чтобы останавливать и перемещаться по файлу всякий раз, а затем просто нажмите shift + f
, чтобы вернуться к текущему потоковому поиску.
itertools.product
, кажется, дает вам то, что вы ищете. Он часто используется вместо вложенных for
циклов, но имеет удобный repeat
kwarg, который облегчает вашу жизнь здесь.
l = 3 # that's a lower-case L. Never use that in code, though, it looks like a 1.
digits = itertools.product(range(3), repeat=l)
# is equivalent to
def my_product():
"""the same as above itertools.product if l==3"""
for i in range(3):
for j in range(3):
for k in range(3):
yield (i, j, k)
my_digits = my_product() # YUCK!
Это создает генератор (примечание: не список!), Который генерирует все значения, которые вы ищете от (0, 0, 0)
до (2, 2, 2)
. Чтобы составить список, просто приведите его к одному.
digits = list(itertools.product(range(3), repeat=l)) # still a lower-case L. Still don't do this.
Затем, чтобы сравнить цифры, просто используйте индексацию, как любой список 2D.
first_value = digits[0]
first_digit = first_value[0]
assert first_digit == digits[0][0]
second_value = digits[1]
first_digit_of_second_value = second_value[0]
assert first_digit_of_second_value == digits[1][0]
if digits[0][0] == digits[1][0]:
# that's these two: v v
# digits == (0, 0, 0), (0, 0, 1), (0, 0, 2), ...
do_whatever_you_want()
Если вы хотите специально вывести (0, 0, 0)
как 000
, вы можете написать для этого функцию:
def sprint_tuple(tup):
"""Takes a tuple of digits and pretty Sprints them.
>>> sprint_tuple((0, 0, 1))
'001'
"""
return ''.join([str(i) for i in tup])
, затем выполнить цикл по digits
и напечатать каждый:
>>> for tup in digits:
... print(sprint_tuple(tup))
000
001
002
010
...
222