全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1726 6
2022-03-06
悬赏 20 个论坛币 已解决
list=[1,2,2,3]
def remove_repeats(events):
    for i in range(len(events) - 1, 0,-1):
      if events == events[i-1]:
        del events
remove_repeats(list)
print(list)

提问,为什么上面的这串代码运行出来就是正确的,但是如果我改变写法,变成下面这写法:

def remove_repeats(events):
    for i in range(len(events) - 1, 0,-1):
      if events == events[i-1]:
        del events
y = remove_repeats([1,2,2,3])
print(y)

出来就是none啊,哪位大神帮我看看为什么,如果想要第二种写法出来不是none怎么改啊?谢谢谢~






最佳答案

正直者之死 查看完整内容

是的,需要在函数最后return events
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2022-3-6 13:42:55
番茄奏鸣曲 发表于 2022-3-7 04:33
啊对, 我贴的时候贴错了....哈哈哈
没有返回值是加return么
是的,需要在函数最后return events
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-3-6 16:33:39
大概率是你的remove_repeats函数没有返回值的问题
然后你贴的代码里if events == events[i - 1]: del events实际应该是if events[i] == events[i - 1]: del events[i]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-3-7 04:33:45
正直者之死 发表于 2022-3-6 16:33
大概率是你的remove_repeats函数没有返回值的问题
然后你贴的代码里if events == events: del events实际 ...
啊对, 我贴的时候贴错了....哈哈哈
没有返回值是加return么
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-3-8 02:29:43
这个不是return的事,是你的 if 和 del 中忘了写 list 的 索引

参考:
复制代码

----------
不用return 也能打印正确的结果,是因为:
    传递list 类型的参数是 “ pass by reference”, 不是 “pass by value”.
    就是 传递的是 原始的 list的地址, 在函数中的任何改变 都将反映在 调用它的 原始list
运行下面的程序,看看结果:
复制代码

结果是: [1, 2, 'hi', 4], 调用foo函数已经改变了 原来的 list1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-3-8 09:45:22
rrrr336 发表于 2022-3-8 02:29
这个不是return的事,是你的 if 和 del 中忘了写 list 的 索引

参考:
建议你仔细看看第二段代码,问题不止一处
复制代码
传入的是新建列表
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群