Проверка 2-мерного массива (как восемь загадок королев)

У вас есть список списков.

Попробуйте:

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]
5
задан Hubert Kario 6 February 2012 в 00:36
поделиться

4 ответа

Одно возможное решение:

def collision(x1, y1, x2, y2):
    return x1 == x2 or y1 == y2 or abs(x1-x2) == abs(y1-y2)

т.е. существует коллизия, если две точки находятся на той же горизонтальной строке, той же вертикальной строке или той же диагонали (вертикальное расстояние == горизонтальное расстояние).

20
ответ дан 18 December 2019 в 07:11
поделиться

Ваше описание походит на экземпляр точной проблемы покрытия, которая может быть решена с помощью алгоритма, который Knuth называет Алгоритмом X. Я реализовал решатель Судоку в JavaScript с помощью этой техники. Можно, вероятно, найти реализации в Python, также.

2
ответ дан 18 December 2019 в 07:11
поделиться

Я думаю, что это было бы намного быстрее, если бы Вы не решили его математически, но сначала проверили все строки на несколько случаев 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 является всегда маленьким, это не должно быть никакой проблемой.

0
ответ дан 18 December 2019 в 07:11
поделиться

Принятие у Вас на самом деле есть N-мерное пространство, которое Вы, вероятно, не делаете, можно использовать этот детектор коллизии:

def collision(t1, t2):
    return len(set([abs(a-b) for a,b in zip(t1, t2)] + [0])) <= 2

Передайте его пара кортежей с любой арностью, которую Вы любите, и это возвратит true, если две точки лягут на какую-либо N-мерную диагональ.

0
ответ дан 18 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: