Списки, содержащие номер - PullRequest
2 голосов
/ 17 марта 2020

Я пытаюсь написать al oop, который проверяет, не появляется ли определенное число в списках в списке. Например: если у меня есть список

[[1,'O', 3], [4, 5, 6], [7, 8, 'X']]

, я хочу написать al oop, который проверяет, появляется ли число 2 в одном из списков, и, если нет, просит вас выбрать новый номер. , Пока что я застрял на этом:

move = 2
for i in range(3):
    for j in range(3):
        if move not in board[i][j]:
            move = int(input("Number already taken. Pick another"))

Но это не работает. Кажется, это довольно простая проверка, но я не знаю, почему это не сработало. У кого-нибудь есть лучшее предложение, как проверить эти списки для данного числа?

Приветствия

Ответы [ 4 ]

6 голосов
/ 17 марта 2020

попробуйте использовать функцию any.

m = [[1,'O', 3], [4, 5, 6], [7, 8, 'X']]
while True:
    move = int(input('....'))
    if any(move in row for row in m):
        break
0 голосов
/ 17 марта 2020

Хотя ответ Андреа более лаконичен и ясен, ответ на вопрос, почему ваш код не работает, заключается в том, что вы сравниваете две переменные с компаратором not in, который ожидает список справа. Подробнее об этом здесь: https://docs.python.org/3/reference/expressions.html#membership -test-операции

Таким образом, чтобы решить эту проблему, либо удалите внутренний l oop и сравните move с внутренними списками, либо вместо этого используйте компаратор equality. Оба варианта ниже:

board = [[1,'O', 3], [4, 5, 6], [7, 8, 'X']]

move = 2
for i in range(3):
  if move not in board[i]:
    move = int(input("1: Number already taken. Pick another"))

for i in range(3):
    for j in range(3):
        if move == board[i][j]:
            move = int(input("2: Number already taken. Pick another"))
0 голосов
/ 17 марта 2020

Учитывая ваше окружение:

target = 2
list_of_lists = [[1,'O', 3], [4, 5, 6], [7, 8, 'X']]

Я бы сделал что-то подобное с однострочником:

True in [target in element for element in list_of_lists]
0 голосов
/ 17 марта 2020

Вы можете использовать выражение генератора :

my_list = [[1,'O', 3], [4, 5, 6], [7, 8, 'X']]

move = 2
numbers = (e for l in my_list for e in l)

if move not in numbers:
    move = int(input("Number already taken. Pick another"))

, более компактную версию:

numbers = (e for l in my_list for e in l)
move = 2 if 2 in numbers else int(input("Number already taken. Pick another"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...