Вот несколько улучшений:
True if x else False
- это просто bool(x)
или, как вы уже сравниваете, просто это выражение, то есть v == number[i]
. - Поскольку вы получаете доступ к номеру по позиционному индексу, вы можете просто
zip
две последовательности.
Так что для первого вы получите:
correct_places = [x == y for x, y in zip(userGuess, number)]
Тот же аргументс zip
относится к следующим двум понятиям (вы можете снова выполнить итерацию по исходной строке):
g = [x for x, y in zip(userGuess, number) if x != y]
n = [y for x, y in zip(userGuess, number) if x != y]
Учитывая, что это в основном одно и то же понимание два раза и что нам не нужно correct_places
больше мы можем вместо этого делать следующее:
g, n = zip(*[(x, y) for x, y in zip(userGuess, number) if x != y])
Тогда вы можете sum
вместо len
:
return sum(x in n for x in g)
Таким образом, вы можете использовать следующий код:
g, n = zip(*(xy for xy in zip(userGuess, num) if xy[0] != xy[1])
return sum(x in n for x in g)