请考虑以下代码段。它在break语句中标记语法错误。
digits = list(str(102))
dummy = list(str(102/2))
for j in digits:
dummy.remove(j) if j in dummy else break
我该如何解决这个问题?(我还想使用三元运算符)
答案 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)
你也可以迭代一个字符串,所以除非你计划用它做一些列表操作,否则不需要在数字上调用列表。