【问题标题】:Check to see if two lists have the same value at the same index, if so return the index. If not return -1检查两个列表是否在同一索引处具有相同的值,如果是则返回索引。如果不返回-1
【发布时间】:2022-11-27 00:58:56
【问题描述】:

所以基本上我试图比较两个列表,看看它们是否在任何时候在同一索引处持有相同的值。如果他们这样做,我返回索引,如果他们不这样做,我返回 -1。 `

Dlist = [17,13,10,6,2]
Ilist = [5,9,10,15,18]
def seqsearch(DS,IS):
    
    for i in range(len(DS)-1):
        found = False
        if DS[i] == IS[i]:
            answer = i
            found = True
            if found == True:
                print(f"Yes! Found at index =", answer)
            else:
                return print("No!\n-1")


print(seqsearch(Dlist,Ilist))

`

当我第一次这样做作为测试时,我没有遇到任何问题,但是添加文本会使它变得更加困难,我的主要问题是 if else 语句。我似乎只能让一条消息起作用,是或否,而不是两者都基于案例。

【问题讨论】:

  • 你打印No对于每个不相同的元素.不要在循环中这样做
  • 你设置了found = True所以if found == True总是会是真的。注意if foundif found == True是一样的,不需要做if正在做的工作,两次。
  • 最后,你已经知道怎么return了,返回不等于打印。如果您有答案,请返回索引。当您用完元素(循环完成)时,返回-1。在函数的末尾。
  • @MartijnPieters 如果不会太麻烦,您认为您可以编写一些示例代码吗?我通过分析代码并将其分解来学习得最好

标签: python list indexing comparison


【解决方案1】:

您可以像这样遍历两个列表:

Dlist = [17, 13, 10, 6, 2]
Ilist = [5, 9, 10, 15, 18]


def seqsearch(DS, IS):

    for index_1, element_1 in enumerate(DS):
        for index_2, element_2 in enumerate(IS):

            if (element_1 == element_2) and (index_1 == index_2):
                print(f"Yes! Found at index ={index_1}")
                return index_1
    print("No!")
    return -1


print(seqsearch(Dlist, Ilist))

但是,您可以进行更多改进。 zip() 确实是一个更好的选择,但理解起来稍微复杂一些。

另外,请注意 returnprint 不同。你之前是不是返回-1;你正在打印它。

【讨论】:

    【解决方案2】:

    我认为更清晰的答案是使用内置的enumeratezip 函数:

    Dlist = [17,13,10,6,2]
    Ilist = [5,9,10,15,18]
    
    def seqsearch(DS,IS):
        for idx, (d, s) in enumerate(zip(DS, IS)):
            if d == s:
                return f"Yes! Found at index = {idx}"
    
        return "No!
    -1"
    
    
    print(seqsearch(Dlist,Ilist))
    

    不清楚您是想只返回第一个索引,还是所有具有匹配元素的索引。在任何一种情况下,最好只返回所需的值,然后在函数范围之外添加任何格式化和打印语句。

    【讨论】:

    • 任务是返回索引或-1,而不是字符串。让函数返回机读信息, 仅在任务完成后打印。该功能也可以用于其他目的。
    • 最好使用return idxreturn -1,然后使用index = seqsearch(...)if 语句来打印人类可读的内容。
    • 是的,我同意,我只是让 OP 的返回输出保持不变
    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2019-09-19
    相关资源
    最近更新 更多