鱼C论坛

 找回密码
 立即注册
查看: 2515|回复: 3

[已解决]Codewars——Unique In Order

[复制链接]
发表于 2023-7-18 22:37:42 | 显示全部楼层 |阅读模式

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

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

x
https://www.codewars.com/kata/54 ... 001667/train/python

Implement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.

For example:


  1. unique_in_order('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
  2. unique_in_order('ABBCcAD')         == ['A', 'B', 'C', 'c', 'A', 'D']
  3. unique_in_order([1, 2, 2, 3, 3])   == [1, 2, 3]
  4. unique_in_order((1, 2, 2, 3, 3))   == [1, 2, 3]
复制代码

  1. def unique_in_order(sequence):
  2.     seq2 = []
  3.     for item in sequence:
  4.         if item not in seq2:
  5.             seq2.append(item)
  6.     return seq2
复制代码


???我的思路没错啊,如果没重复的话就append
最佳答案
2023-7-18 22:38:17
标题:Codewars——Unique In Order
内容:

你的思路部分是对的,但你的实现只是简单地过滤掉了所有的重复项,而不是只过滤掉相邻的重复项。所以,你需要稍微调整你的代码以满足这个条件。下面是一个可能的解决方案:
  1. def unique_in_order(iterable):
  2.     if len(iterable) == 0:
  3.         return []
  4.     res = [iterable[0]]
  5.     for item in iterable[1:]:
  6.         if item != res[-1]:
  7.             res.append(item)
  8.     return res
复制代码

让我们详细地解释一下这个解决方案。

首先,我们检查输入的迭代器是否为空。如果为空,那么我们直接返回一个空列表。

然后,我们创建一个列表  res ,并将  iterable  的第一个元素放入列表中。这是因为我们知道第一个元素总是唯一的。

接下来,我们遍历  iterable  中的其余元素。对于每个元素,我们检查它是否与  res  的最后一个元素相同。如果不同,那么我们就将其添加到  res  中。这就保证了我们只添加了那些不与前一个元素重复的元素。

最后,我们返回  res ,它是一个包含了  iterable  中所有非重复元素的列表。

这样,我们就实现了一个满足题目要求的  unique_in_order  函数。

希望这个解释对你有所帮助!如果你还有其他的问题,欢迎随时向我提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-18 22:38:17 | 显示全部楼层    本楼为最佳答案   
标题:Codewars——Unique In Order
内容:

你的思路部分是对的,但你的实现只是简单地过滤掉了所有的重复项,而不是只过滤掉相邻的重复项。所以,你需要稍微调整你的代码以满足这个条件。下面是一个可能的解决方案:
  1. def unique_in_order(iterable):
  2.     if len(iterable) == 0:
  3.         return []
  4.     res = [iterable[0]]
  5.     for item in iterable[1:]:
  6.         if item != res[-1]:
  7.             res.append(item)
  8.     return res
复制代码

让我们详细地解释一下这个解决方案。

首先,我们检查输入的迭代器是否为空。如果为空,那么我们直接返回一个空列表。

然后,我们创建一个列表  res ,并将  iterable  的第一个元素放入列表中。这是因为我们知道第一个元素总是唯一的。

接下来,我们遍历  iterable  中的其余元素。对于每个元素,我们检查它是否与  res  的最后一个元素相同。如果不同,那么我们就将其添加到  res  中。这就保证了我们只添加了那些不与前一个元素重复的元素。

最后,我们返回  res ,它是一个包含了  iterable  中所有非重复元素的列表。

这样,我们就实现了一个满足题目要求的  unique_in_order  函数。

希望这个解释对你有所帮助!如果你还有其他的问题,欢迎随时向我提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 22:39:25 | 显示全部楼层
isdkz 发表于 2023-7-18 22:38
标题:Codewars——Unique In Order
内容:

谢,下次直接问GPT
  1. def unique_in_order(sequence):
  2.     seq2 = []
  3.     last = None
  4.     for item in sequence:
  5.         if item != last:
  6.             seq2.append(item)
  7.         last = item
  8.     return seq2
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 22:41:34 | 显示全部楼层
Threebody1 发表于 2023-7-18 22:39
谢,下次直接问GPT

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 11:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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