Как сравнить элементы внутри двумерного списка (python)?

347 просмотра
0
0 Комментариев

Есть допустим список a = [[1, 2, 3], [4, 2, 5], [6, 2, 5]]
a[0][1] == a[1][1] == a[2][1]

Пробовал так, но мне кажется, что это не самый лучший вариант:

for i in range(3):
    for k in range(3):
        if a[i][k] == a[i+1][k] == a[i+2][k]:
            True

С обработкой исключения соответственно.


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

а мне надо сравнить элементы на одинаковых позициях, но в разных вложенных списках

from itertools import groupby
 
for nums in zip([1, 2, 3], [4, 2, 5], [6, 2, 5]):
    print(nums, len(list(groupby(nums))) == 1)
    # print(nums, nums.count(nums[0]) == len(nums))
 
# (1, 4, 6) False
# (2, 2, 2) True
# (3, 5, 5) False

Добавить комментарий
0

По-моему модуль Numpy идеально подходит для работы с N-мерными числовыми матрицами.

Пример:

import numpy as np
a = np.array([[1, 2, 3], [4, 2, 5], [6, 2, 5]])
print(a)

Вывод:

[[1 2 3]
 [4 2 5]
 [6 2 5]]

Проверка:

сравниваем элемент по индексу [0,1] (1-я строка, 2-й столбец [вся нумерация начинается с нуля, поэтому [0, 1]]) со вторым столбцом: [:, 1]

In [7]: (a[0, 1] == a[:, 1]).all()
Out[7]: True

Как это работает:

In [8]: a[:, 1]
Out[8]: array([2, 2, 2])
 
In [10]: a[0, 1] == a[:, 1]
Out[10]: array([ True,  True,  True], dtype=bool)

для третьего столбца:

In [9]: (a[0, 2] == a[:, 2]).all()
Out[9]: False


Случай посложнее — пусть нам дана матрица:

In [64]: a
Out[64]:
array([[1, 2, 3, 0, 1, 6],
       [4, 2, 5, 0, 1, 7],
       [6, 2, 5, 0, 1, 8]], dtype=int64)

Надо найти все столбцы с одинаковыми элементами:

In [65]: (a == a[0,:]).all(axis=0)
Out[65]: array([False,  True, False,  True,  True, False], dtype=bool)
 
In [66]: a[:, (a == a[0,:]).all(axis=0)]
Out[66]:
array([[2, 0, 1],
       [2, 0, 1],
       [2, 0, 1]], dtype=int64)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up