在Python中比较列表值(数字,顺序事项)

时间:2016-12-26 14:01:32

标签: python list

我试着在各处寻找答案,我确信这很简单,但不知怎的,我无法让它发挥作用。

我有两个列表,它们具有完全相同的值,我想知道其中有多少列出了完全匹配的值和位置。这是我一直在使用的代码:

ListA = [1, 2, 3, 4, 5]

solved = 0

While solved == 0:
   rr = 0
   i = 0

   userinput = input("Enter a 5 digit number):")
   ListB = []

   for u in userinput:
        ListB.append(u)

   While i < 5:
        if ListA[i] == ListB[i]:
            rr = rr + 1
   print(rr)
   solved = 1

我正在寻找的输出是,例如,如果输入是12763,2,但它似乎永远不会评估if为真,所以它永远不会向rr添加1。 我尝试了for循环和这种设置的变体,但我看不出我错在哪里。

非常感谢你的时间!

5 个答案:

答案 0 :(得分:1)

ListA包含整数,而ListB将包含(单个字符)字符串。请尝试使用int(ListB[i])

此外,内部while循环是无限的,因为i永远不会改变。

答案 1 :(得分:0)

对我来说,像你一样过于复杂的事情。一些列表推导应该可以解决这个问题:

ListB = [int(x) for x in userinput]
rr = sum([ListA[i] == ListB[i] for i in range(len(ListA))])

答案 2 :(得分:0)

你有几个问题:

  1. While应为while
  2. 您从用户收到的输入是一个字符串,因此当您进行迭代时,应将其转换为int,因为您想要比较整数。
  3. 您的i变量永远不会增加,因此您处于无限循环中。
  4. 试试这个:

    ListA = [1, 2, 3, 4, 5]
    
    solved = 0
    
    while solved == 0:
       rr = 0
       i = 0
    
       userinput = input("Enter a 5 digit number):")
       ListB = []
    
       for u in userinput:
            ListB.append(int(u))
    
       while i < 5:
            if ListA[i] == ListB[i]:
                rr = rr + 1
            i += 1
       print(rr)
       solved = 1
    

答案 3 :(得分:0)

input()函数返回一个字符串。在比较之前,您需要将各个数字转换为int s。您还可以使用zip()来比较两个列表中的相应项目:

>>> listA = [1, 2, 3, 4, 5]
>>> userinput = input("Enter a 5 digit number: ")
Enter a 5 digit number: 12567
>>> listB = [int(x) for x in userinput]
>>> sum(x == y for x, y in zip(listA, listB))
2

答案 4 :(得分:-1)

我认为解决办法可能就是这样:

第一个而不是你也永远不会把我增加到第二个而且最后如何将副本复制到列表输入中?你用空间还是怎么样?你怎么知道什么时候有5个号码?我觉得他们被空间分开了吗?

ListA = [1, 2, 3, 4, 5]

solved = 0

while solved == 0:
  rr = 0
  i = 0

  userinput = input("Enter a 5 digit number: ")
  ListB = [int(x) for x in userinput.split(' ') if x.isdigit()]

  while i < 5:
    if ListA[i] == ListB[i]:
      rr += 1
    i += 1
  print(rr)
  solved = 1

如果输入为1 2 3 4 5,则输出5

更新:  如果输入为5位数,则无法拆分空间以查找其他用户解决方案