Есть ли эквивалент метода any в python? - PullRequest
1 голос
/ 23 апреля 2019

В стандартной библиотеке Python есть очень удобная функция с именем any, которая позволяет проверять заданное значение, если какой-либо элемент в данной итерации проверяет какое-либо условие.

my_list = [1, 3, 4, 5, 8]

# using any
four_is_present = any(elem == 4 for elem in my_list)

# is equivalent to
four_is_present = False
for elem in my_list:
    if elem == 4:
        four_is_present = True
        break

Мне интересно, есть ли в Rust эквивалентный синтаксический сахар или мне нужно перейти к более «длинному» выражению.

1 Ответ

5 голосов
/ 23 апреля 2019

Да.Существует Iterator::any, который является методом для Итератора (в отличие от Python, где это автономная функция, которая принимает Итератор).

Вы можете вызывать его как любой другойmethod.

fn main() {
    let my_list = vec![1, 3, 4, 5, 8];
    println!("{}", my_list.iter().any(|&i| i == 4));
}

Если вы все равно используете Vec или slice, вы можете использовать contains, который будет использовать метод any в его реализация .

fn main() {
    let my_list = vec![1, 3, 4, 5, 8];
    println!("{}", my_list.contains(&4));
}

В API doc также будут перечислены другие полезные методы, например all, chain, zip, mapили filter.Также в документации есть примеры этих методов, которые стоит прочитать.

...