有个 Python 问题想请教一下

2019-04-07 18:54:58 +08:00
 sidegem
def function(nums):
    for n in nums:
        if nums.count(n) != 1:
            nums.remove(n)
    return len(nums)

if __name__ == '__main__':
    nums=[1,1,1,1]
    a=function(nums)
    for i in range(a):
        print(nums[i])

使用 python3,问题是 function 函数中 for 循环为什么只循环了两次?

2037 次点击
所在节点    Python
9 条回复
Kylin30
2019-04-07 19:10:53 +08:00
应该是因为你在循环中修改了 nums
sidegem
2019-04-07 19:14:46 +08:00
@Kylin30 嗯,我知道了修改了 nums,但不明白这里循环的终止条件是什么?
frostming
2019-04-07 19:20:02 +08:00
@sidegem 每次拿到下一个元素,直到没有元素可拿

你删了两个元素,所以第一次拿的是 nums[0], 第二次是 nums[2], 然后没有下一个了
Vegetable
2019-04-07 19:24:15 +08:00
第一,for 循环可以认为是根据索引的.
第二,remove 会移除第一个匹配项
当 remove 前两个 1 之后,nums[2]就不存在了,所以 for 循环直接结束.
sidegem
2019-04-07 19:26:37 +08:00
@Vegetable 嗯,明白了👍😂
txydhr
2019-04-07 19:48:31 +08:00
头像。。。。。
sidegem
2019-04-07 19:54:59 +08:00
@txydhr 哈哈,撞头像了
darkjoker
2019-04-08 11:50:51 +08:00
哈哈
sidegem
2019-04-08 16:20:33 +08:00
@darkjoker 嗯?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX