在python中设置突变,为什么下面的代码没有给我想要的结果

时间:2017-03-08 09:26:20

标签: python

我只是想实现set mut,以下是相同的代码

a=raw_input()
setA=set(list(map(int,raw_input().split())))
N=int(raw_input())
for i in range(N):
    operation=raw_input().split()
    setB=set(list(map(int,raw_input().split())))
    if 'update' in operation[0]:
        setA.update(setB)
    elif 'intersection_update' in operation[0]:
        setA.intersection_update(setB)
    elif 'symmetric_difference_update' in operation[0]:
        setA.symmetric_difference_update(setB)
    elif 'difference_update' in operation[0]:
        setA.difference_update(setB)
print sum(setA)

如果我实现上面的代码,我注意到除了更新之外没有其他指令实际实现... 有人能解释我背后的原因! inputs =字符串,它们之间有空格 输出应该是setA中存在的元素的总和 感谢您提前回复:)

2 个答案:

答案 0 :(得分:0)

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    print("Strat to load")
    activityIndicator.startAnimating()
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    print("finish to load")
    activityIndicator.stopAnimating()
}

仔细查看此代码段。如果子字符串if 'update' in operation[0]: setA.update(setB) elif 'intersection_update' in operation[0]: setA.intersection_update(setB) elif 'symmetric_difference_update' in operation[0]: setA.symmetric_difference_update(setB) elif 'difference_update' in operation[0]: setA.difference_update(setB) 不在update中,则operation[0]中不存在intersection_update。有些人会选择其他精灵。

另一方面,假设您的operation[0]包含operation[0],即使这样,相应的elif也不会被调用。因为,symmetric_difference_update也是如此,这将被执行。因此,即使对于有效输入,也只会执行第一个if。

那么解决方案是什么?

您必须更改条件的顺序。将较大的字符串放在顶部,将较大字符串的子字符串放在底部,这样就不会生成上面的大小写。其中一个解决方案:

if 'update' in operation[0]

或者,更合适的是,您只需检查if 'symmetric_difference_update' in operation[0]: setA.symmetric_difference_update(setB) elif 'difference_update' in operation[0]: setA.difference_update(setB) elif 'intersection_update' in operation[0]: setA.intersection_update(setB) elif 'update' in operation[0]: setA.update(setB) 而不是==。然后订单并不重要。

答案 1 :(得分:0)

不完全确定您正在处理的输入数据,但我猜测问题是您正在使用

needle in haystack 

匹配字符串的一部分而不是

A==B

哪个匹配精确的字符串。在这样做之前,您可能想要剥离空白区域。所以我建议尝试这个:

a=raw_input()
setA=set(list(map(int,raw_input().split())))
N=int(raw_input())
for i in range(N):
    operation=raw_input().split()
    setB=set(list(map(int,raw_input().split())))
    command = operation[0].strip()
    if 'update' == command:
        setA.update(setB)
    elif 'intersection_update' == command:
        setA.intersection_update(setB)
    elif 'symmetric_difference_update' == command:
        setA.symmetric_difference_update(setB)
    elif 'difference_update' == command:
        setA.difference_update(setB)
print sum(setA)