У вас есть список списков.
Попробуйте:
word_split1=[['amazon','brand','- ','solimo','premium','almonds',',','250g','by','solimo'],['hersheys','cocoa', 'powder', ',', '225g', 'by', 'hersheys'],['jbl','t450bt','extra','bass','wireless','on-ear','headphones','with','mic','white','by','jbl','and']]
stop_words = set(stopwords.words('english'))
filtered_words=[]
for i in word_split1:
for j in i:
if j not in stop_words:
filtered_words.append(j)
<час> или сгладьте свой список.
Пример:
from itertools import chain
word_split1=[['amazon','brand','- ','solimo','premium','almonds',',','250g','by','solimo'],['hersheys','cocoa', 'powder', ',', '225g', 'by', 'hersheys'],['jbl','t450bt','extra','bass','wireless','on-ear','headphones','with','mic','white','by','jbl','and']]
stop_words = set(stopwords.words('english'))
filtered_words=[]
for i in chain.from_iterable(word_split1):
if i not in stop_words:
filtered_words.append(i)
или
filtered_words = [i for i in chain.from_iterable(word_split1) if i not in stop_words]
Одно возможное решение:
def collision(x1, y1, x2, y2):
return x1 == x2 or y1 == y2 or abs(x1-x2) == abs(y1-y2)
т.е. существует коллизия, если две точки находятся на той же горизонтальной строке, той же вертикальной строке или той же диагонали (вертикальное расстояние == горизонтальное расстояние).
Ваше описание походит на экземпляр точной проблемы покрытия, которая может быть решена с помощью алгоритма, который Knuth называет Алгоритмом X. Я реализовал решатель Судоку в JavaScript с помощью этой техники. Можно, вероятно, найти реализации в Python, также.
Я думаю, что это было бы намного быстрее, если бы Вы не решили его математически, но сначала проверили все строки на несколько случаев 1 с, затем все столбцы и наконец все диагональные строки.
Вот некоторый код для тестирования диагональных строк простым способом. (Это - JavaScript, извините!)
var count = 0;
for (column = -n; column < n; column++) {
for (row = 0; row < n; row++) {
// conditions for which there are no valid coordinates.
if (column + row > 6) {
break;
}
if (column < 0) {
continue;
if (field[row][column] == 1) {
count++;
if (count == 2)
break; // collision
}
}
}
Этот метод имел бы сложность O(n^2)
, тогда как тот, который Вы предложили, имеет сложность O(n^2 + k^2)
(k быть числом 1 с), Если k
является всегда маленьким, это не должно быть никакой проблемой.
Принятие у Вас на самом деле есть N-мерное пространство, которое Вы, вероятно, не делаете, можно использовать этот детектор коллизии:
def collision(t1, t2):
return len(set([abs(a-b) for a,b in zip(t1, t2)] + [0])) <= 2
Передайте его пара кортежей с любой арностью, которую Вы любите, и это возвратит true, если две точки лягут на какую-либо N-мерную диагональ.