arrays - if 和 else 的执行如何在 python 中的 while 语句中工作
问题描述
while (S!=[] and (arr[S[len(S)-1]] <= arr[i]
if (order=='G') else arr[S[len(S)-1]] >= arr[i] )):
print("bla")
1)我想知道何时调用 print 语句
2)if和else的代码执行顺序和工作顺序如何
3)我从未见过任何情况,否则这是我第一次看到
4) 以下代码片段取自
https://www.geeksforgeeks.org/find-next-smaller-next-greater-array/
5)我们可以简化上述条件吗?
解决方案
让我们稍微解构一下代码:
while (S!=[] and (arr[S[len(S)-1]] <= arr[i]
if (order=='G') else arr[S[len(S)-1]] >= arr[i] )):
print("bla")
可以改写为:
if order == 'G':
while (S!=[] and arr[S[len(S)-1]] <= arr[i]):
print('bla')
else:
while (S!=[] and arr[S[len(S)-1]] >= arr[i]):
print('bla')
现在,开始回答:
只要
S
不为空并且 inarr
最后一个位置S
的值大于arr
第i
th 位置的值,就会调用 print 语句。由于这是 python,我们可以重写arr[S[len(S)-1]]
为arr[S[-1]]
,如果有帮助的话。Python 中的 if-else 内联语句的工作方式如下
a = 2 if condition else 3
:如果条件为真,则 a 为 2;否则,它将是 3。这就是为什么它可以被重写为:
if condition:
a = 2
else:
a = 3
需要明确的是,即使在其内联形式中,Python首先评估条件,然后才选择值。举一个我想说的例子,这没关系:
a = <thing that raises an exception> if <thing that is False> else <valid thing>
# a will be <valid thing>, no exceptions will be raised.
- 仅此代码段就不能真正简化为:
if order == 'G':
while (S!=[] and arr[S[-1]] <= arr[i]):
print('bla')
else:
while (S!=[] and arr[S[-1]] >= arr[i]):
print('bla')
至于 3. 和 4.,我不知道该怎么回答。
推荐阅读
- javascript - ctx.fillrect 不起作用
- python - 如何将破折号应用程序保存为可执行文件以供本地机器使用
- javascript - 将多个对象与对象数组中的值总和合并并在javascript中重新排列数组
- android - Android Fragment - 隐藏永久导航栏打开 BottomSheetFrag 或始终
- c# - 是否有任何工具可以可视化 Akka.net 中的演员关系?
- jquery - (索引):583 未捕获的类型错误:无法读取未定义的属性“添加”
- c# - 如何乘以列值并按另一列分组并使用 LINQ 返回对象列表
- c# - 如何在内存中编译并使用 Microsoft.CodeAnalysis 获取程序集
- json - Newtonsoft.Json.Schema 未针对 JSON 模式正确验证 JSON 输入
- html - Material sidenav 导致 translate 和 flex css 属性出现问题