检查两个列表在同一索引处是否具有相同的值,如果是,则返回索引。如果不是,则返回 -1

Check to see if two lists have the same value at the same index, if so return the index. If not return -1

提问人:user15346274 提问时间:11/27/2022 最后编辑:user15346274 更新时间:12/1/2022 访问量:1259

问:

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

当我第一次将其作为测试时,我没有遇到任何问题,但是添加文本使它变得更加困难,我的主要问题是 if else 语句。我似乎只能让一条消息起作用,要么是,要么是否,不能根据情况同时进行。

Python 列表 索引 比较

评论

0赞 Martijn Pieters 11/27/2022
打印每个不相同的元素。不要在循环中执行此操作No
0赞 Martijn Pieters 11/27/2022
你设置的所以永远是真的。注意,这与,不需要做正在做的工作,两次是一样的。found = Trueif found == Trueif foundif found == Trueif
1赞 Martijn Pieters 11/27/2022
最后,你已经知道怎么做了,返回和打印是不一样的。如果有答案,请返回索引。当元素用完(循环完成)时,返回 .在函数的末尾。return-1
0赞 user15346274 11/27/2022
@MartijnPieters,如果不是太麻烦的话,你认为你可以编写一些示例代码吗?我通过分析代码并分解它来学习效果最好

答:

0赞 ep742 11/27/2022 #1

我认为一个更简洁的答案使用内置和函数: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!\n-1"


print(seqsearch(Dlist,Ilist))

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

评论

0赞 Martijn Pieters 11/27/2022
任务是返回索引 或 ,而不是字符串。让函数返回机器可读信息,仅在任务完成后打印。然后,该功能也可以用于其他目的。-1
1赞 Martijn Pieters 11/27/2022
最好使用 和 ,然后使用 和 使用 语句来打印人类可读的内容。return idxreturn -1index = seqsearch(...)if
0赞 ep742 11/27/2022
是的,我同意,我只是保持 OP 的返回输出相同
0赞 PythonForEver 11/27/2022 #2

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

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

-1赞 ali 11/27/2022 #3

我尝试使用您的代码来更好地使用 undrestand(但根据您的使用,我们有很多选择)

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


def seqsearch_with_print(DS, IS):
    """this function only print not return!!!
    if you use return your function ended!"""
    for i in range(len(DS) - 1):
        if DS[i] == IS[i]:
            print(f"Yes! Found at index {i}")
        else:
            print(f"No not equal in {i} index")


def seqsearch_with_list(DS, IS):
    """this function save history of (equal index or not: as 1, -1)"""
    temp_list = []
    for i in range(len(DS) - 1):
        if DS[i] == IS[i]:
            temp_list.append(1)
        else:
            temp_list.append(-1)
    return temp_list


def seqsearch_with_list_dict(DS, IS):
    """this function save history of (equal index or not: as 1, -1)
    as key, value (key== index, value==list item)"""
    temp_list = []
    for i in range(len(DS) - 1):
        if DS[i] == IS[i]:
            temp_list.append({i: 1})
        else:
            temp_list.append({i: -1})
    return temp_list


# no need print(in function we used print)
seqsearch_with_print(Dlist, Ilist)
"""
return of function: 
    No not equal in 0 index
    No not equal in 1 index
    Yes! Found at index 2
    No not equal in 3 index"""

# save history of search index in list
print(seqsearch_with_list(Dlist, Ilist))
"""
return of function with print:
    [-1, -1, 1, -1]
"""
# save history as dict key value
print(seqsearch_with_list_dict(Dlist, Ilist))
"""
return of function with print
    [{0: -1}, {1: -1}, {2: 1}, {3: -1}]
"""