减少没有lambda

时间:2017-05-21 01:01:27

标签: python reduce

我成功编写了一些代码,如果列表中的所有项都是素数,则返回true 我认为这是reduce的一个很好的候选人 - 到目前为止我只使用reducelambda一起使用 - 是否可以避免lambda并使用直接函数?

def is_prime(list):
    np = "Prime"
    for n in list:
        if n < 2:
            np = "NonPrime"
            print np
            # return np
        else:
            for i in range(3, n):   #int(math.sqrt(n))
                if n % i == 0:
                    np ="NonPrime"
                    print np
    return np   

1 个答案:

答案 0 :(得分:3)

您可能希望重构此代码以检查数字是否为素数,然后使用该代码来测试数字列表是否为all()素数。 all()会比reduce()好,因为它会短路。

注意:你不应该使用list作为变量或参数,因为它隐藏了python内置类型。

def is_prime(n):
    if n < 2:
        return False
    for i in range(3, n):   #int(math.sqrt(n))
        if n % i == 0:
            return False
    return True

def all_primes(iterable):
    return all(is_prime(n) for n in iterable)

>>> all_primes([2,3,5,7])
True
>>> all_primes([2,3,5,8])
False

如果你真的想以reduce()的形式实现它,那么你实际上是使用and将一个布尔值列表减少为一个布尔值,在and中定义了一个operator的运算符。 operator.and_模块,from functools import reduce # Py3 import operator as op def all_primes(iterable): return reduce(op.and_, (is_prime(n) for n in iterable))

public void createShowView() {

    ShowcaseView sc =  new ShowcaseView.Builder(getActivity())
            .setTarget(new ViewTarget())
            .setContentTitle("")
            .setContentText("")
            .setStyle(R.style.CustomShowcaseTheme2)
            .hideOnTouchOutside()
            .setShowcaseEventListener(new SimpleShowcaseEventListener() {
                public void onShowcaseViewDidHide(ShowcaseView showcaseView) {
                    Intent tab2 = new Intent(getContext(), tabs.class);
                    tab2.putExtra("Specific Tab", 1);
                    startActivity(tab2);

                }
            })
            .build();


}

public void createDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("To view a full tutorial of ...., press continue.")
            .setTitle("View Tutorial");
    builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            createShowView();

        }
    });
    builder.setNegativeButton("Skip Tutorial", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            getActivity().getSharedPreferences("PREFERENCE", Context.MODE_PRIVATE).edit()
                    .putBoolean("isfirstrun", false)
                    .commit();

        }
    });

        AlertDialog dialog = builder.create();
        dialog.show();

}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Boolean isFirstRun = this.getActivity().getSharedPreferences("PREFERENCE", Context.MODE_PRIVATE)
            .getBoolean("isfirstrun", true);

    if (isFirstRun) {


        createDialog();



    }

}