#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. ОК. В таком случае у меня есть для вас альтернативная версия. Возможно, вы захотите попробовать это.