在python中使用三元运算符?

时间:2016-05-13 15:48:16

标签: python ternary-operator

请考虑以下代码段。它在break语句中标记语法错误。

digits = list(str(102))
dummy = list(str(102/2))
for j in digits:
    dummy.remove(j) if j in dummy else break

我该如何解决这个问题?(我还想使用三元运算符)

2 个答案:

答案 0 :(得分:6)

修改

(请参阅我在评论中与Stefan Pochmann的对话)

三元运算符不仅用于 语句,而是用于赋值或表达式(而break只是 语句):

a = 5 if cond else 3 #OK
do() if cond else dont() #also OK
do() if cond else break #not OK

使用普通if-else语句来执行语句:

if cond:
    do()
else:
    break

答案 1 :(得分:2)

你不能使用break你的循环逻辑可以使用 itertools.takewhile 重新编写,如果你想要一个更简洁的解决方案

digits = list(str(102))
dummy = list(str(102/2))

from itertools import takewhile

for d in takewhile(dummy.__contains__, digits):
    dummy.remove(d)

你也可以通过反转你的逻辑来消除使用for循环的else的需要,检查j是否在虚拟中断时为真:

for j in digits:
    if j not in dummy:
        break
    dummy.remove(j)

此外,如果你想从虚拟数字中删除所有出现的任何初始元素,删除不会对任何重复元素执行此操作,但在创建要删除的元素集后使用列表comp :

digits = str(102)
dummy = list(str(102/2))
st = set(takewhile(dummy.__contains__, digits))
dummy[:] = [d for d in dummy if d not in st]

print(dummy)

你也可以迭代一个字符串,所以除非你计划用它做一些列表操作,否则不需要在数字上调用列表。