首页 > 解决方案 > 遍历数组(列表)但按索引顺序?

问题描述

我正在做一个简单的转换项目,用于将数字转换为二进制和十六进制。但是在编写代码时,我在处理 hex 函数时遇到了错误。

  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字典是要走的路?

标签: pythonarrayslist

解决方案


我不太明白你想用最后的两个嵌套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])

推荐阅读