楼主: 番茄奏鸣曲
1725 6

[问答] 关于相邻数字去重问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

60%

还不是VIP/贵宾

-

威望
0
论坛币
1808 个
通用积分
32.1968
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
6004 点
帖子
92
精华
0
在线时间
150 小时
注册时间
2012-2-20
最后登录
2022-4-28

楼主
番茄奏鸣曲 发表于 2022-3-6 13:42:54 |AI写论文
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
关键词:Events repeat REMOVE Event range

沙发
正直者之死 发表于 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么

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

参考:
  1. def remove_repeats(events):
  2.     for i in range(len(events) - 1, 0,-1):
  3.         if events[i] == events[i-1]:
  4.             del events[i]
  5.             
  6. list1=[1,2,2,3]
  7. remove_repeats(list1)
  8. print(list1)
复制代码

----------
不用return 也能打印正确的结果,是因为:
    传递list 类型的参数是 “ pass by reference”, 不是 “pass by value”.
    就是 传递的是 原始的 list的地址, 在函数中的任何改变 都将反映在 调用它的 原始list
运行下面的程序,看看结果:
  1. def foo(onelist):
  2.     onelist[2] = "hi"
  3.    
  4. list1 = [1, 2, 3, 4]
  5. foo(list1)
  6. print(list1)
复制代码

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

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

参考:
建议你仔细看看第二段代码,问题不止一处
  1. y = remove_repeats([1, 2, 2, 3])
复制代码
传入的是新建列表

7
rrrr336 发表于 2022-3-8 10:49:25
正直者之死 发表于 2022-3-8 09:45
建议你仔细看看第二段代码,问题不止一处传入的是新建列表
哦,没仔细看。 好建议

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-2 04:21