鱼C论坛

 找回密码
 立即注册
查看: 1683|回复: 22

[已解决]求助!如何删除list中重复的连续三次的元素!感谢

[复制链接]
发表于 2020-5-19 22:27:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义remove_triplets()函数,该函数传递一个整数列表作为参数。该函数从列表中删除所有三元组(即,删除列表中完全相同的三个连续元素)。

Test 1:a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
remove_triplets(a_list)
print(a_list)

result 1:[7, 3]

Test 2:a_list = [6, 6, 6, 7, 6, 6, 6, 6, 6]
remove_triplets(a_list)
print(a_list)

result2:[7, 6, 6]

Test 3:a_list = [1, 1, 1, 1]
remove_triplets(a_list)
print(a_list)

result 3:[1]


最佳答案
2020-5-19 23:32:46
题目要求是在原列表的基础上进行删除元素,而非创建新列表
  1. def  remove_triplets(a_list):
  2.     i=len(a_list)-1
  3.     while i>=2:
  4.         if a_list[i]==a_list[i-1]==a_list[i-2]:
  5.             a_list.pop(i-2)#连续删除三个相同的元素
  6.             a_list.pop(i-2)
  7.             a_list.pop(i-2)
  8.             i-=3
  9.             continue
  10.         i-=1


  11. a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
  12. remove_triplets(a_list)
  13. print(a_list)

  14. a_list1 = [6, 6, 6, 7, 6, 6, 6, 6, 6]
  15. remove_triplets(a_list1)
  16. print(a_list1)

  17. a_list2 = [1, 1, 1, 1]
  18. remove_triplets(a_list2)
  19. print(a_list2)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 22:35:06 | 显示全部楼层
骚等~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 22:38:58 | 显示全部楼层
变成集合不就行了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 22:46:45 | 显示全部楼层
老八秘制 发表于 2020-5-19 22:38
变成集合不就行了?

那怎么写呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 22:47:29 | 显示全部楼层

好滴!先谢谢大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 22:47:49 | 显示全部楼层

set()一下,甲鱼视频应该讲了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 22:53:29 | 显示全部楼层
MIQIWEI 发表于 2020-5-19 22:47
好滴!先谢谢大佬!

刚刚去解决tkinter的问题了 我回来啦哈哈

帮你写下骚等哈~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 23:03:27 | 显示全部楼层
Twilight6 发表于 2020-5-19 22:53
刚刚去解决tkinter的问题了 我回来啦哈哈

帮你写下骚等哈~

好滴!每次都能看到你!真的是大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:16:28 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-19 23:57 编辑
MIQIWEI 发表于 2020-5-19 23:03
好滴!每次都能看到你!真的是大佬!


不,我不是大佬,我做这题都做了十几分钟....大佬几分钟就搞定了

之前代码错了,订正:
  1. def remove_triplets(ls):

  2.     count = 0

  3.     while count < len(ls)-2:
  4.         if len(set(ls[count:count+3]))==1 :
  5.             ls.remove(ls[count])
  6.             ls.remove(ls[count])
  7.             ls.remove(ls[count])
  8.         else:
  9.             count += 1

  10.     return ls

  11. a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
  12. print(remove_triplets(a_list))
  13. a_list = [6, 6, 6, 7, 6, 6, 6, 6, 6]
  14. print(remove_triplets(a_list))
  15. a_list = [1, 1, 1, 1]
  16. print(remove_triplets(a_list))
  17. a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
  18. remove_triplets(a_list)
  19. print(a_list)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:32:46 | 显示全部楼层    本楼为最佳答案   
题目要求是在原列表的基础上进行删除元素,而非创建新列表
  1. def  remove_triplets(a_list):
  2.     i=len(a_list)-1
  3.     while i>=2:
  4.         if a_list[i]==a_list[i-1]==a_list[i-2]:
  5.             a_list.pop(i-2)#连续删除三个相同的元素
  6.             a_list.pop(i-2)
  7.             a_list.pop(i-2)
  8.             i-=3
  9.             continue
  10.         i-=1


  11. a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
  12. remove_triplets(a_list)
  13. print(a_list)

  14. a_list1 = [6, 6, 6, 7, 6, 6, 6, 6, 6]
  15. remove_triplets(a_list1)
  16. print(a_list1)

  17. a_list2 = [1, 1, 1, 1]
  18. remove_triplets(a_list2)
  19. print(a_list2)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:34:39 | 显示全部楼层
Twilight6 发表于 2020-5-19 23:16
不,我不是大佬,我做这题都做了十几分钟....大佬几分钟就搞定了

题目要求是在原列表上修改,不是创建新列表哎~~
你的程序原列表没变,把新列表最为返回值返回了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:37:08 | 显示全部楼层
老八秘制 发表于 2020-5-19 22:47
set()一下,甲鱼视频应该讲了

set是不行滴~~~
题目要求是删除连续三个相同的元素。相同但不连续的不删除,连续相同两个也不删除
请看给出的示例2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 23:38:42 | 显示全部楼层
Twilight6 发表于 2020-5-19 23:16
不,我不是大佬,我做这题都做了十几分钟....大佬几分钟就搞定了

还有一个问题 就是它题目要求是这个样子测试
a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
remove_triplets(a_list)
print(a_list)

我在后面加了几行 但是好像不太对 我是用的索引 把这个原始列表更新成了新列表 可以再告诉我一下该怎么改吗?谢谢!
    for index in range(len(new_ls)):
        ls[index]=new_ls[index]
        return ls

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:38:51 | 显示全部楼层
sunrise085 发表于 2020-5-19 23:32
题目要求是在原列表的基础上进行删除元素,而非创建新列表

好吧 那我在改改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:40:23 | 显示全部楼层
MIQIWEI 发表于 2020-5-19 23:38
还有一个问题 就是它题目要求是这个样子测试
a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
re ...

我感觉我不配答题了  题目都没读好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 23:41:27 | 显示全部楼层
Twilight6 发表于 2020-5-19 23:40
我感觉我不配答题了  题目都没读好

哈哈哈哈哈不不不 你还是很厉害的!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:42:54 | 显示全部楼层
MIQIWEI 发表于 2020-5-19 23:41
哈哈哈哈哈不不不 你还是很厉害的!!!

能给我点时间在挽回一下下嘛  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:44:11 | 显示全部楼层
MIQIWEI 发表于 2020-5-19 23:38
还有一个问题 就是它题目要求是这个样子测试
a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
re ...

看10楼~~
对的话,给评个最佳~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 23:49:42 | 显示全部楼层
sunrise085 发表于 2020-5-19 23:44
看10楼~~
对的话,给评个最佳~~

哇!感谢!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:50:37 | 显示全部楼层
我回来了QAQ
  1. def remove_triplets(ls):

  2.     count = 0

  3.     while count < len(ls)-2:
  4.         if len(set(ls[count:count+3]))==1 :
  5.             ls.remove(ls[count])
  6.             ls.remove(ls[count])
  7.             ls.remove(ls[count])
  8.         else:
  9.             count += 1


  10.     return ls

  11. a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
  12. print(remove_triplets(a_list))
  13. a_list = [6, 6, 6, 7, 6, 6, 6, 6, 6]
  14. print(remove_triplets(a_list))
  15. a_list = [1, 1, 1, 1]
  16. print(remove_triplets(a_list))
  17. a_list = [6, 6, 6, 7, 6, 6, 6, 3, 3, 3, 8, 8, 8, 3]
  18. remove_triplets(a_list)
  19. print(a_list)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表