我生成了以下代码来遍历字典中的键
favourite_languages = {
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python'
}
friends = ['sarah', 'phil']
for name in favourite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title() + ", I see your favourite language is " +
favourite_languages[name].title() + "!")产生的输出是
Jen
Sarah
Edward
Phil
Hi Phil, I see your favourite language is Python!然而,我期望的是:
Jen
Sarah
Hi Sarah, I see your favourite language is C!
Edward
Phil
Hi Phil, I see your favourite language is Python!为什么萨拉没有出现在输出中?
发布于 2017-07-12 20:02:31
您需要将if语句移到循环中。在其当前状态下,它在外部,因此只能访问name接受的最后一个值。
此外,我建议您将friends存储为一个集合,以便快速高效地查找。
In [193]: favourite_languages = {
...: 'jen':'python',
...: 'sarah':'c',
...: 'edward':'ruby',
...: 'phil':'python'
...: }
...:
...: friends = {'sarah', 'phil'}
...: for name in favourite_languages.keys():
...: print(name.title())
...:
...: if name in friends:
...: print(" Hi " + name.title() + ", I see your favourite language is " +
...: favourite_languages[name].title() + "!")
...:
Phil
Hi Phil, I see your favourite language is Python!
Jen
Edward
Sarah
Hi Sarah, I see your favourite language is C!集合具有恒定时间的(O(1))查找,而列表是线性(O(n))。对于您的特定用例,这可能无关紧要,但sets确实能处理大量数据。
作为进一步的改进,您不需要调用dict.keys(),因为这会为循环创建一个要迭代的键列表,这有点浪费。同样的事情也可以通过以下方式实现:
for name in favourite_languages:这更简单,效率更高。
发布于 2017-07-12 20:04:49
解决方案是,你只需将if条件移到循环中即可。
favourite_languages = {
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python'
}
friends = ['sarah', 'phil']
for name in favourite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title() + ", I see your favourite language is " +
favourite_languages[name].title() + "!")输出:
Sarah
Hi Sarah, I see your favourite language is C!
Edward
Jen
Phil
Hi Phil, I see your favourite language is Python!发布于 2017-07-12 20:01:55
if语句中的name变量被设置为循环后friends的最后一个值,并且if语句只执行一次。
我认为您应该缩进if语句(并打印),以便在循环的每次迭代中执行该语句
https://stackoverflow.com/questions/45057098
复制相似问题