#python #list #filter
#python #Список #Фильтр
Вопрос:
Я пытаюсь получить элементы в виде списка, если какой-либо из них находится в одной и той же позиции в двух 2D-матрицах.
Давайте рассмотрим матрицу A и матрицу B
A = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
B = [[0, 2, 5],[6, 2, 4],[7, 8, 1]]
Результирующий список должен быть
C = [2, 7, 8]
Я пытался использовать фильтр, но он не работает.
def find(A):
for i in range(3):
for j in range(3):
if A[i][j] == B[i][j]:
return A[i][j]
else:
return False
A = [[1, 2, 3],[4, 5, 6], [7, 8, 9]]
B = [[0, 2, 5],[6, 2, 4], [7, 8, 1]]
C = filter(find, A)
for element in C:
print(element)
Примечание: Пожалуйста, используйте фильтр для достижения цели.
Ответ №1:
Решение с использованием фильтра:
def find(L):
A, B = L
if A == B:
return True
else:
return False
A = [[1, 2, 3],[4, 5, 6], [7, 8, 9]]
B = [[0, 2, 5],[6, 2, 4], [7, 8, 1]]
# flatten lists
A = [item for row in A for item in row]
B = [item for row in B for item in row]
C = filter(find, zip(A,B))
# filter returns a tuple for each row but we only want the single element
C = [item[0] for item in C]
print(list(C))
Дает нам
[2, 7, 8]
Комментарии:
1. Спасибо за ваш ответ!
Ответ №2:
Попробуйте это,
def func(t):
return True if t[0] == t[1] else False
A = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
B = [[0, 2, 5],[6, 2, 4],[7, 8, 1]]
C = [item1 for lst1, lst2 in zip(A, B) for item1, item2 in filter(func, zip(lst1, lst2))]
>>> C
[2, 7, 8]
Ответ №3:
Основной ответ
Сначала мы перебираем A и B, i и z теперь содержат внутренние списки.
Затем мы перебираем эти внутренние списки, используя g и q, если они равны, мы добавляем их в пустой список.
to_fill = []
for i,z in zip(A,B):
for g,q in zip(i,z):
if g==q:
to_fill.append(g)
Адаптируйте его по своему усмотрению.
Комментарии:
1. Он может быть написан более компактным способом, однако для образовательных целей лучше рассматривать его как цикл.
2. На самом деле, я хочу получить его с помощью функции filter .
3. @user3804152 вы никогда не упоминали об этом в своем вопросе. вы сказали, что попробовали фильтр, но он не сработал (очевидно)
4. Извините за это. Я думал, это понятно! Я редактирую.
Ответ №4:
Наиболее эффективный способ достижения желаемого — использовать numpy:
import numpy as np
A = np.asarray(A)
B = np.asarray(B)
C = A[A==B]
Комментарии:
1. Спасибо. Но я хочу добиться этого с помощью фильтра.