有人可以解释一下这段代码的含义吗

时间:2019-10-11 02:42:25

标签: python for-loop

请解释这段代码

rollNumber[:]=[items for items in rollNumber if items in sampleDict.values()]

这是完整的代码

rollNumber  = [47, 64, 69, 37, 76, 83, 95, 97]
sampleDict  ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97} 

print("List -", rollNumber)
print("Dictionary - ", sampleDict)

rollNumber[:] = [item for item in rollNumber if item in sampleDict.values()]
print("after removing unwanted elemnts from list ", rollNumber)

5 个答案:

答案 0 :(得分:0)

rollNumber[:] = [item for item in rollNumber if item in sampleDict.values()]

对于满足if条件的for循环中的每个值,都将其添加到列表rollNumber中。

答案 1 :(得分:0)

简而言之,它是遵循以下代码的简写

tempRollNumber = []

for item in rollNumber:
    if item in sampleDict.values():
        tempRollNumber.append(item)

rollNumber = tempRollNumber

答案 2 :(得分:0)

不确定[:]对rollNumber [:]的含义。但是这行代码

[item for item in rollNumber if item in sampleDict.values()]

将变量rollNumber设置为一个事物列表,其中rollnumber中与sampleDict值匹配的所有项目都在新列表中。

可以在此处扩展到此块以了解发生了什么。

temproll = []
for item in rollNumber:
    if item in sampleDict.values():
        temproll.append(item)

答案 3 :(得分:0)

rollNumber[:] = [item for item in rollNumber if item in sampleDict.values()]

这行代码在列表rollNumber和sampleDict字典的值(不是键,而是值)之间进行逐元素比较。

如果rollNumber[i] == sampleDict.values()[i],则将该值写入rollNumber列表中(称为“就地替换”),如果未找到匹配项,则不写入该值...因此最终您只能得到匹配的一组值。

答案 4 :(得分:0)

几个答案已解释了作业的右侧,但没有人解释了[:]在左侧的用法。

我很懒,所以我将链接到该问题的现有答案:What is the difference between slice assignment that slices the whole list and direct assignment?