我成功编写了一些代码,如果列表中的所有项都是素数,则返回true
我认为这是reduce
的一个很好的候选人 - 到目前为止我只使用reduce
与lambda
一起使用 - 是否可以避免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
答案 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();
}
}