Python if-else short-hand
Possible Duplicate:
Ternary conditional operator in Python
我想在python中执行以下操作:
1 2 3 4
| while( i < someW && j < someX){
int x = A[i] > B[j]? A[i++]:B[j++];
....
} |
很明显,当i或j达到极限时,代码将跳出循环。我需要循环外的i和j的值。
我真的要吗
1 2 3 4 5 6 7 8
| x=0
...
if A[i] > B[j]:
x = A[i]
i+=1
else:
x = B[j]
j+=1 |
或者有人知道更短的路吗?
除了上面的内容,我可以让python支持类似于
1 2
| a,b=5,7
x = a > b ? 10 : 11 |
- 第二部分:@ martijnpieters certainly is not a复制,但我肯定about the first one。
- "嗯,第一部分:DSM the needed盎司黑莓不会是语言结构和环是discovered by the OP…你想尝试和全给写在迭代器?
- @:DSM也不看任何人,兼职addressing below。;;;;;;;)
- "我thankful Martijn皮特斯,AM在participations Comment is for your,相当便宜。如果你我有一个答案的第一部分工作,后。ridicule is not推理。
- 我user1612593 @:对不起,我不ridicule均值to You。它以time to get used to在语言和它idioms。there is here to context太小和简明的答案给你meaningful;do not encounter情况是你在idiomatic Python类。
- user1612593 MP @:网络知识(知道,无论如何!预热器和辐射:intending),正是"literal ridicule,辐射。光滑的表没有给你想要的确切的说因为是Python,but not because这类问题的工具和enumeratezip与与我们不需要的。
- 我需要给我edited J of the while和外环。
- "你是user1612593:基本looping over the concatenation of a和b类;使用for x in sorted(A + B):for that the implementation can handle;sort在Python的类,非常efficiently合并。在发电机,以A或写在输入和Bthem as,the iter()在线和next值,收益率(或者小。
- (超):@ user1612593 to the same GENERIC发电机给gist.github.com 4596098工作:/
最易读的方法是
但是你也可以使用and和or:
"python的禅"说"可读性很重要",不过,还是从第一个角度出发吧。
另外,如果您将变量而不是10,并且它的值为False,那么and或trick将失败。
但是,如果超过赋值取决于此条件,则可以更容易地按照您的方式编写它:
1 2 3 4 5 6
| if A[i] > B[j]:
x = A[i]
i += 1
else:
x = A[j]
j += 1 |
除非你把i和j放在容器里。但如果你告诉我们你为什么需要它,很可能你不需要。
- 在python 2.5中添加
- 谢谢。这是我问题的第二部分。投票!
- 我已经编辑过显示我需要while循环之外的j和i。
- x = a > b and 10 or 11在特定的一组问题中也能正常工作,因为任何计算结果为false而不是10的值都会使它失败,例如字符串。
- [i<2 and i or i-4 for i in range(4)]返回:[-4, 1, -2, -1]。它拖了我两天的时间,我不得不和我的教授一行一行地阅读代码,以弄清楚为什么我们的算法不起作用。谢谢。
试试这个:
这是一个执行示例:
1 2 3 4
| >>> a,b=5,7
>>> x = a > b and 10 or 11
>>> print x
11 |
- 10 if a > b else 11。无需使用布尔运算符。
- @马蒂:说得对,先生。:)
- 谢谢。这是我问题的第二部分。投票!