【问题标题】:Using python to compare two lists. Why Python compares the first number of the first list with all the numbers of the second list?使用 python 比较两个列表。为什么 Python 将第一个列表的第一个数字与第二个列表的所有数字进行比较?
【发布时间】:2015-11-04 23:43:35
【问题描述】:

这是该计划的使命:

编写一个程序 listcomp1.py,比较用户输入的两个等长列表。应创建由 0 和 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()

【问题讨论】:

  • 嗯...这不是 PHP,我不认为 mylist1[] 在 Python 中是惯用的。
  • 在其他问题中,您需要将final_list.append(return_val) 缩进一次。

标签: python list loops for-loop


【解决方案1】:

一种更简单且符合 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())

另外,您可能会因使用列表推导和三元运算符而获得一些额外积分。 ;)

【讨论】:

    【解决方案2】:

    一个班轮:

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

    但如果你不明白为什么会这样,那么我仍然认为你不会在课堂上取得好成绩。

    【讨论】:

    • 必须使用!= 而不是==
    【解决方案3】:

    因为您设置了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
    

    【讨论】:

      【解决方案4】:

      我相信你可以做到这样:

          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 没有意义。

      【讨论】:

        【解决方案5】:
        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()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-24
          • 2019-11-14
          • 1970-01-01
          • 2015-08-21
          • 1970-01-01
          • 2022-08-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多