遍历数组(列表)但按索引顺序循环?

时间:2020-09-01 21:44:28

标签: python arrays list

我正在研究一个简单的转换项目,用于将数字与二进制和十六进制进行相互转换的实践。但是,当我编写代码时,在使用十六进制函数时遇到了错误。

  numArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F']
  valArr = []

  print('Please input number to convert here... ')
  userIn = int(input('>>> '))
  userData = userIn

  breakDown = True
  while breakDown:
    leftOver = userData / 16
    leftConv = int(leftOver)
    remainder = userData % 16

    userData = leftConv

    valArr.append(remainder)

    print(valArr)

    if leftConv < 1:
      valArr.reverse() #result I want converted in this order 
      print(valArr) # Prints to console the above
      break

    
  for x in range(0, len(numArr)):
    numArrVals = numArr[x]

    for y in range(0, len(valArr)):
      valArrVals = valArr[y]

      if valArrVals == x:
        print(numArrVals) # Prints out of order, lowest to highest

此代码的输出,当输入时说... 999是37E。这是因为'y'for循环中的if语句是从最低值打印到最高值。十六进制的999的实际值为3E7。

TL:DR-有没有办法按索引顺序而不是数字大小比较两个大小不同的数组?我确信该解决方案很容易,并且在发布之后,我可能最终会解决它。到那时为止,任何帮助都将不胜感激!也许Python字典是路要走?

1 个答案:

答案 0 :(得分:0)

我不太了解您到底想用两个嵌套的for循环做什么(我可以粗略地想象,但是要想解释出什么问题比仅仅展示如何做更困难)正确执行)。

从本质上来说,您已经将结果反转到valArr中。您只需要将每个数字x转换为相应的十六进制数字,即numArr[x]

所以不是

  for x in range(0, len(numArr)):
    numArrVals = numArr[x]

    for y in range(0, len(valArr)):
      valArrVals = valArr[y]

      if valArrVals == x:
        print(numArrVals) # Prints out of order, lowest to highest

您可以使用

for x in valArr:
    print(numArr[x])