Перебор списков в списке - PullRequest
0 голосов
/ 10 июля 2019

Я написал некоторый код для перебора списка списков, который возвращает истину или ложь, основываясь на том, что i для индекса в списке больше, чем все другие значения j для того же индекса в других списках:

for i in range(len(list)):
    for j in range(0, len(list)):
        if (np.any(list[i]) >= np.all(list[j])):
            count = count + 1
            results.append((count == len(list) - 1))

print (results)

это прекрасно работает при поиске правильного ответа. Однако проблема в том, что функция не выполняет итерацию по всему списку внутри списка, как я надеюсь. Например, из списка, подобного этому:

list =[[1, 3, 6, 5, 9], [7, 2, 8, 9, 1]]

Я бы ожидал такой вывод:

results = [False, True, True, False, False, True, False, True, True, False]

Однако он выполняет итерации только по первым двум индексам и останавливается.

results = [False, True, True, False]

Я знаю, что это, вероятно, потому что длина list равна 2, но у меня нет хорошего решения, чтобы заставить функцию перебирать весь список внутри списка. Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 10 июля 2019

Старайтесь избегать использования ключевых слов Python в качестве имен переменных (например: list). Но если вы вычислите максимальное значение для каждого столбца перед циклом, тогда вам будет проще вычислить, что вам нужно, например:

Код:

lst = [[1, 3, 6, 5, 9], [7, 2, 8, 9, 1]]
maxes = [max(x) for x in zip(*lst)]
print([r == m for row in lst for r, m in zip(row, maxes)]

Или как стандартная for петля:

result = []
for row in lst:
    for r, m in zip(row, maxes):
        result.append(r == m)

Результаты:

[False, True, False, False, True, True, False, True, True, False]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...