我正在尝试在列表中找到所有匹配的答案,但它不起作用[重复]

Posted

技术标签:

【中文标题】我正在尝试在列表中找到所有匹配的答案,但它不起作用[重复]【英文标题】:I am trying to find all matching answers in a list but it isn't working [duplicate] 【发布时间】:2021-04-08 14:06:57 【问题描述】:

我正在自学编程。在我的代码中,我正在练习嵌套循环,并且正在做一个练习,看看我是否可以从列表中找到所有匹配的数字。 但是它只返回第一个数字,并且没有遍历整个列表,有人可以帮忙吗?提前致谢

  mylist = []

def intersection(lst1, lst2):
  for n in lst1:
    for o in lst2:
      if n == o:
        mylist.append(n)
        return mylist

【问题讨论】:

你的return应该在函数的end 我建议改用集合,作为question中接受的回复 【参考方案1】:

return 语句需要取消缩进,以便将其放置在函数的末尾而不是循环内:

def intersection(lst1, lst2):
  mylist = []
  for n in lst1:
    for o in lst2:
      if n == o:
        mylist.append(n)
  return mylist

之前,当它紧跟在mylist.append(n) 之后时,该函数会在该代码行之后立即返回结果,一旦找到第一个重叠元素就会触发该结果(即我们的答案将只有一个元素)。如果我们把它放在函数的末尾,它只会在算法完成后返回。

我还在函数内部移动了mylist 的定义,否则如果您多次调用该函数,将会覆盖结果。

另外,由于您正在学习 python,我也可能会查看list comprehensions,它被认为更“pythonic”,更简洁,并且在许多情况下执行速度更快:

def intersection(lst1, lst2):
  return [n for n in lst1 for o in lst2 if n == o]

然而,由于重叠元素在任一列表中多次出现,上述两种实现都会出现重复。例如:

intersection([1,1,2,3], [1,1,2,4])
>>> [1,1,1,1,2]

更好的实现是使用python sets and the built in set intersection operator:

def intersection(lst1, lst2):
  return list(set(lst1) & set(lst2))

intersection([1,1,2,3], [1,1,2,4])
>>> [1,2]

【讨论】:

【参考方案2】:

这里,return将在代码第一次进入if语句时直接执行。

1- 只需 unndent 您的 return myList,以便它在您的循环之后执行,而不是期间执行。

2 - 另外,你有一个在函数中返回的全局变量有点奇怪。我建议保持整洁,并返回一个新的列表,这样可以防止一些潜在的错误。


def intersection(lst1, lst2):
  mylist = []
  for n in lst1:
    for o in lst2:
      if n == o:
        mylist.append(n)
  return mylist

【讨论】:

【参考方案3】:

查看返回语句,即代码的最后一行。一旦找到匹配项,您就会从内部“for”循环返回;所以你的代码将返回并且永远不会返回到'def intersection(lst1,lst2)'函数。尝试解决这个问题,看看你是否能找到错误。

【讨论】:

【参考方案4】:

一旦您在函数中返回某些内容,就无法返回上一次调用来检索更多值。取消缩进return 声明:

mylist = []

def intersection(lst1, lst2):
  for n in lst1:
    for o in lst2:
      if n == o:
        mylist.append(n)
  return mylist

您也可以使用yield 语句:

def intersection(lst1, lst2):
  for n in lst1:
    for o in lst2:
      if n == o:
        yield n

print(list(intersection([1, 2, 3], [2, 3, 4])))

输出:

[2, 3]

【讨论】:

【参考方案5】:

您只需取消缩进 return 语句,这样两个循环就可以在它返回之前完成。

def intersection(lst1, lst2):
    my_list = []
    for n in lst1:
        for o in lst2:
            if n == o:
            my_list.append(n)
    return my_list

【讨论】:

【参考方案6】:

因为你的回归!

def intersection():
    lst1=["1","7","5"]
    lst2 = ["8","7"]
    mylist=[]
    
    for n in lst1:
        for o in lst2:
            if n == o:
                mylist.append(n)
     print(mylist)

intersection()

【讨论】:

这是一个完全不同(而且用处不大)的函数。它没有任何参数,也没有返回任何内容。最好通过更正缩进(取消缩进return)来解决此问题,而不是更改程序的工作方式.. 完全一样,哈哈!我只是声明列表并打印而不是返回......但它仍然是相同的功能,是的,这是一个缩进问题 它不是 same 功能。原始函数接受输入并(尝试)返回输出。这个函数没那么有用 - 每次调用它都会做同样的事情。

以上是关于我正在尝试在列表中找到所有匹配的答案,但它不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试使用 Jquery-Ajax 使用 JSON 响应,但它不起作用。正在加载空选择下拉列表

错误:未找到参数名称,尝试了 df.Data 但它不起作用?? (朱莉娅)

我正在尝试在 discord.js 中为我的机器人创建一个自动角色功能,但它不起作用

我正在尝试在终端中运行 npm start,但它不起作用

我正在尝试制作一个简单的 Discord Bot,但它不起作用

在 python 列表中向后或向前循环以查找匹配项