2017-02-18 16 views
0

Так что я не использовал функции лямбда много, и мои профессора толкают, что мы их используем, поэтому я немного борюсь.Лямбда-функция, которая проверяет, находится ли одна из трех строк в строке

Я работаю в Pyspark, и мне нужно проверить, есть ли одно из трех слов в строке и подсчитать, сколько раз они появляются. Вот моя текущая попытка:

lines = sc.textFile("File")  
counts = lines.filter(lambda line: "x" or "y" or "z" in line.lower()) 
counts.count() 

Когда я это делаю, счетчик равен общему числу строк, что неверно.

Любая помощь будет высоко оценена.

+1

' "х" в ... или "у" в ... или "г" в ...' – Barmar

ответ

1

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

counts = lines.filter(lambda line: "x" in line.lower() or "y" in line.lower() or "z" in line.lower()) 

Чтобы упростить его, вы можете использовать any

counts = lines.filter(lambda line: any(x in line.lower() for x in ["x", "y", "z"])) 
+0

Вау, было не знаю о функции 'any'. Спасибо за краткий ответ. – madsthaks

0

Проблема в том, что "x" or "y" or "z" in line.lower() всегда True. Любая непустая строка является «Trueish» в Python, а булевское выражение True or ... всегда равно True, независимо от того, что следует за True.

Лучший способ: Использовать Пайтона any

lines = sc.textFile("File")  
counts = lines.filter(lambda line: any(c in line.lower() for c in ["x", "y", "z"])) 
counts.count() 

 Смежные вопросы

  • Нет связанных вопросов^_^