我正在尝试在列表中找到所有匹配的答案,但它不起作用[重复]
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 中为我的机器人创建一个自动角色功能,但它不起作用