【问题标题】:Python Codewars: can someone explain how/why this happens?Python Codewars:有人可以解释这是如何/为什么会发生的吗?
【发布时间】:2021-11-27 10:28:08
【问题描述】:

我正在做 Codewars,却被这个简单的问题困住了。问题是:

你在这个 kata 中的目标是实现一个差异函数,它从列表中减去一个列表 另一个并返回结果。 它应该从列表 a 中删除所有值,这些值存在于列表 b 中,并保持它们的顺序。 如果 b 中存在一个值,则必须从另一个中删除所有出现的值。

这是我尝试过的:

def array_diff(a, b):
    if a == []: return b
    if b == []: return a
    for occurrence in b:
      if occurrence in a:
        a.remove(occurrence)
    return a

由于某种原因,我得到了 2 次失败的测试,这些失败的测试的要求是:

a was [1,2,2], b was [2], expected [1]: [1, 2] should equal [1]

a was [], b was [1,2], expected []: [1, 2] should equal []

任何人都可以帮助我并在可能的情况下解释一下吗?任何帮助表示赞赏。 编辑:我的借口是我是 Python 的初学者,所以如果这个问题有非常明显的错误/错误,对不起

【问题讨论】:

  • 一个简单的return [value for value in a if value not in b] 不够吗?
  • 请不要编辑您的问题以包含答案,如果您愿意,您可以回答自己的问题。或者,如果 picchiolu 的答案对您有用,那么您可以接受它(小绿色复选标记)。
  • 啊好的,谢谢你的建议。还要感谢马蒂亚斯的回答。它有效,而且比我的代码更干净

标签: python arrays multiple-occurrence


【解决方案1】:

您可以尝试如下修改您的代码:

def array_diff(a, b):
    if a == []: return a
    if b == []: return a
    for occurrence in b:
        if occurrence in a:
            a = list(filter(lambda val: val != occurrence, a)
    return a

【讨论】:

  • 不知何故,您的回答在最后一行给了我一条错误消息。这是一个错误语法
  • 我修好了。不过还是很感谢你的回答,谢谢!
  • 我想我搞砸了缩进。我修改了答案。
  • 哦,好的。伟大的!如果您觉得有帮助,请考虑选择我的答案。
【解决方案2】:

我修好了。如果有人遇到同样的问题,这是代码: 第一个代码是Matthias提供的,简洁多了,请使用。

def array_diff(a, b):    
    return [value for value in a if value not in b]
    # CREDITS TO MATTHIAS FOR THIS SIMPLE SOLUTION

我的代码,如果有人感兴趣的话:

def array_diff(a, b):
    #if a == []: return b
    #if b == []: return a
    # these if statements are replaced by the"for item in range" code below
    for occurrence in b:
      if occurrence in a:
        for item in range(a.count(occurrence)):
            a.remove(occurrence)
    return a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2015-10-16
    • 2022-01-10
    相关资源
    最近更新 更多