Подтвердить что ты не робот

Сравнить строку со всеми значениями в массиве

Я пытаюсь пробираться через python и учиться лучше всего делать. У меня есть строка, где я делаю сравнение с другой строкой, чтобы увидеть, есть ли совпадение:

if paid[j].find(d)>=0:
    #BLAH BLAH

Если 'd' были массивом, то какой наиболее эффективный способ проверить, соответствует ли строка, содержащаяся в платной [j], любому значению в 'd'?

4b9b3361

Ответ 1

Если вы хотите узнать, содержится ли какой-либо элемент d в paid[j], как вы буквально говорите:

if any(x in paid[j] for x in d): ...

Если вы также хотите знать, какие элементы d содержатся в paid[j]:

contained = [x for x in d if x in paid[j]]

contained будет пустым списком, если в paid[j] не содержится элементов d.

Еще есть другие решения, если вы хотите еще одну альтернативу, например, получить первый элемент d, содержащийся в paid[j]None, если элемент не содержится):

firstone = next((x for x in d if x in paid[j]), None)

BTW, так как в комментарии вы указываете предложения и слова, возможно, вам не обязательно нужна проверка строки (это то, что делают все мои примеры), потому что они не могут рассматривать границы слов - например, каждый пример скажет, что "cat" - это in "obfuscate" (потому что "obfuscate" содержит "cat" в качестве подстроки). Чтобы разрешить проверки границ слов, а не простые проверки подстроки, вы могли бы продуктивно использовать регулярные выражения... но я предлагаю вам открыть отдельный вопрос по этому вопросу, если это то, что вам нужно, - все фрагменты кода в этом ответе, в зависимости от по вашим точным требованиям, будет работать одинаково хорошо, если вы измените предикат x in paid[j] на более сложный предикат, такой как somere.search(paid[j]) для соответствующего объекта RE somere. (Python 2.6 или лучше - незначительные различия в 2.5 и ранее).

Если ваше намерение - это что-то еще, например, получение одного или всех индексов в d элементов, удовлетворяющих вашему ограничению, есть и простые решения для этих разных проблем... но если вы на самом деле требуется так далеко от того, что вы сказали, мне лучше прекратить гадать и надеюсь, что вы уточните; -).

Ответ 2

Я предполагаю, что вы имеете в виду list, а не array? В Python есть такая вещь, как массив, но чаще всего вам нужен список вместо массива.

Чтобы проверить, содержит ли список значение, используйте in:

if paid[j] in d:
    # ...

Ответ 3

В Python вы можете использовать оператор in. Вы можете сделать следующее:

>>> "c" in "abc"
True

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

>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True

Ответ 4

for word in d:
    if d in paid[j]:
         do_something()

попробует все слова в списке d и проверьте, можно ли их найти в строке paid[j].

Это не очень эффективно, так как paid[j] нужно снова отсканировать для каждого слова в d. Вы также можете использовать два набора: один, состоящий из слов в предложении, один из ваших списков, а затем посмотрите на пересечение множеств.

sentence = "words don't come easy"
d = ["come", "together", "easy", "does", "it"]

s1 = set(sentence.split())
s2 = set(d)

print (s1.intersection(s2))

Вывод:

{'come', 'easy'}