У Юлии как отбросить слова с определенным характером? - PullRequest
2 голосов
/ 27 октября 2019

Я хочу собрать слова, которые не содержат определенный символ.

Я чувствую, что это должно быть намного проще, чем мое текущее решение (которое жестко использует регулярные выражения).

Но, увы, я просто не понимаю.

Вот мое текущее решение, которое работает:

want(s) = match(r"\?",s) == nothing
[s for s in lst if want(s)]

Все остальное дает мне синтаксические ошибки:

[s for s in lst if not '?' in s]
[s for s in lst if not ('?' in s)]
filter((x) ->  not ('?' in x),["?asdas","bbb"])

Я могу сделать это с помощью подробного тернарного оператора:

 filter((x) ->  ('?' in x ? false : true),["?asdas","bbb"])

но это не кажется элегантным.

Предложения?

Ответы [ 2 ]

5 голосов
/ 27 октября 2019

not не является допустимым ключевым словом. операция отрицания в джулии !. например, этот код работает:

[s for s in lst if !('?' in s)]
1 голос
/ 27 октября 2019

Свертывание является более кратким вариантом с использованием filter:

filter(x -> '?' ∉ x, ["?asdas","bbb"])

в основном просто !in и может быть записано как \notin. Возможно, более эффективным (вам нужно проверить это для ваших реальных данных) является использование регулярного выражения и match как

filter(x -> isnothing(match(r"\?", x)), ["?asdas","bbb"])
...