使用python比较两个列表。为什么Python将第一个列表的第一个数字与第二个列表的所有数字进行比较?

时间:2015-11-04 23:43:35

标签: python list loops for-loop

这是该计划的使命:

  

编写一个程序listcomp1.py,用于比较用户输入的两个相等长度的列表。应创建由0&1和1组成的第三个列表以跟踪列表之间的差异。差异列表中的索引i处的0表示被比较的两个列表中的索引i处的项目是相同的。差异列表中的索引i处的1表示被比较的列表中的索引i处的项目是不同的。

输入:用户输入的两个列表,一次输出一个:由0和1组成的列表,显示被比较的两个列表中的项目相同或不同

def main():
    mylist = [5,7,7,8]
    mylist1 = [5,6,7,8]
    return_val = 0
    final_list = [0]
    num1 = mylist1[]
    for num in mylist:
        if num == num1:
            return_val = 0
        else:
            return_val = 1
    final_list.append(return_val)

main()

5 个答案:

答案 0 :(得分:2)

更容易和PEP 8兼容的方式。

def main():
    my_list = [5, 7, 7, 8]
    my_list_1 = [5, 6, 7, 8]
    return [0 if x == y else 1 for x, y in zip(mylist, my_list_1)]


print(main())

另外,使用列表推导和三元运算符可能会得到一些额外的分数。 ;)

答案 1 :(得分:1)

一个班轮:

[ int(i != j) for i,j in zip(mylist, mylist1)]

但如果你无法弄清楚为什么会有效,那么我仍然认为你在课堂上不会做得好。

答案 2 :(得分:0)

因为您已设置num1 = mylist1[](我不知道这是有效的Python)。您应该跟踪索引,并使用相同的索引来索引两个列表。

即:

for i in range(len(mylist)):
    if mylist[i] == mylist1[i]:
        # stuff
    else:
        # other stuff

更好的是,使用枚举

for i, val in enumerate(mylist):
    if val == mylist1[i]:
        # stuff
    else:
        # other stuff

答案 3 :(得分:0)

我相信你可以这样做:

    mylist = [5,7,7,8]
    mylist1 = [5,6,7,8]
    return_val = 0
    final_list = [0]
    num1 = mylist1
    for num,num1 in zip(mylist,mylist1):
        if num == num1:
            return_val = 0
        else:
            return_val = 1
        final_list.append(return_val)

    print final_list

请注意python对缩进是明智的,因此在您的代码中final_list.append(return_val)被错误地放置。此外,您需要迭代两个数组,而不仅仅是一个。所以你的测试num == num1没有意义。

答案 4 :(得分:0)

SAME, DIFFERENT = 0, 1

def get_list(prompt, dtype=lambda s:s):
    return [dtype(s) for s in input(prompt).split()]

def main():
    list1 = get_list("Please enter a space-separated list of integers: ", int)
    list2 = get_list("And again: ", int)
    differences = [SAME if a==b else DIFFERENT for a,b in zip(list1, list2)]
    print(differences)

if __name__=="__main__":
    main()