Проверьте, есть ли какой-либо элемент списка в матрице?

#python #python-3.x #list #numpy #matrix

Вопрос:

У меня есть небольшой список:

 list2 = ['hi', 'ma', 'ja']
 

и у меня тоже есть матрица. например:

 matrix2 = ([['high','h ight','hi ght','h i g ht'],
       ['man','ma n','ma th','mat h'],
       ['ja cket','j a ck et','jack et','ja m']
       ['ma nkind','jack',' hi ','hi'])
 

И мне нужно определить, нет ли каких-либо элементов l ist2 этого массива в матрице 2.
Я пытаюсь использовать np.isin() :

 np.isin(matrix2,list2) 

 

Но этот код показывает только, есть ли элементы в матрице или нет полностью. Но мне нужен этот результат:

 output = ([[False, False, True, False],
       [False, True, True, False],
       [True, False, False, True]
       [True, False, True, False])])
 

Как вы можете видеть на выходных данных, пробелы тоже важны. Например, «привет» без пробелов до и после-это не то, чего я хочу. Мне нужен список, учитывая пробелы между набором символов.

Может ли кто-нибудь помочь мне решить эту проблему?

Комментарии:

1. с какой логикой вы получаете output[0][4] = [True, False, True, False]

2. @user1740577, похоже, ошибка. Должно быть [True, False, True, True] .

3. Пространства. «привет» без пробелов до и после-это не то, чего я хочу. Мне нужен список, учитывая пробелы между набором символов. @пользователь1740577

4. @экзоцитоз, тогда вы, возможно, захотите добавить это ограничение в вопрос. Разве этого не было бы достаточно, чтобы определить list2 = ['hi ',' hi', 'ma', 'ja']

5. Ты прав. Я сделаю это сейчас. @Matthias

Ответ №1:

Вы должны пройти по матрице, а затем по каждой строке матрицы. Затем у вас есть одна строка, которую вы должны разделить, чтобы получить отдельные части. Теперь вы можете проверить, есть ли какая-либо из этих деталей list2 .

list2 = [«привет», «ма», «джа»]

 matrix2 = [['high','h ight','hi ght','h i g ht'],
            ['man','ma n','ma th','mat h'],
            ['ja cket','j a ck et','jack et','ja m'],
            ['ma nkind','jack',' hi ','hi']]

output = []
for row in matrix2:
    new_row = [any(value in list2 for value in element.split()) for element in row]
    output.append(new_row)
print(output)
 

В результате получается

 [[False, False, True, False], 
 [False, True, True, False], 
 [True, False, False, True], 
 [True, False, True, True]]
 

Незначительное изменение, учитывающее дополнительные ограничения существующего пространства.

 output = []
for row in matrix2:
    new_row = [any(value in list2 and ' ' in element for value in element.split()) for element in row]
    output.append(new_row)
print(output)
 

Это даст вам

 [[False, False, True, False],
 [False, True, True, False],
 [True, False, False, True],
 [True, False, True, False]]
 

Комментарии:

1. Спасибо за ваш ответ, но, к сожалению, я не могу запустить этот код.

2. Не могли бы вы объяснить, что вы имеете в виду, говоря «Я не могу запустить этот код»? Вы получаете ошибку или ссылаетесь на дополнительное ограничение, которое вы указали в комментариях после того, как я ответил?

3. Я хотел удалить свой комментарий. У меня была проблема с моим компилятором, поэтому у меня была ошибка. После обновления компилятора это сработало. Спасибо.

4. ОК. В таком случае у меня есть для вас альтернативная версия. Возможно, вы захотите попробовать это.