Python二维数组中的查找

本文阅读 2 分钟
首页 Python笔记 正文

对于在一个每一行从左到右依次递增,每一列从上到下依次递增的二维数组查找一个元素,可以选择从数组左上角开始查找arrayi,如果目标元素大于arrayi,i+=1,如果元素小于arrayi,j-=1,依次循环直至找到这个数。

  1. # -*- coding:utf-8 -*-
  2. '''
  3. 在一个二维数组中,每一行都按照从左到右递增的顺序排序
  4. 每一列都按照从上到下递增的顺序排序。
  5. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
  6. '''
  7. '''
  8. 查找方式从右上角开始查找
  9. 如果当前元素大于target, 左移一位继续查找
  10. 如果当前元素小于target, 下移一位继续查找
  11. 进行了简单的修改, 可以判定输入类型为字符的情况
  12. '''
  13. '''
  14. 如果出现了array中既有字符串,又有数字,可能需要用到ord()函数,这里就不展开讨论了
  15. '''
  16. class Solution:
  17. # array 二维列表
  18. def Find(self, array, target):
  19. # 判断数组是否为空
  20. if array == []:
  21. return False
  22. rawnum = len(array)
  23. colnum = len(array[0])
  24. # 判断非法输入
  25. # 可以换成 isinstance(target, (int, float)) 进行判断
  26. if type(target) == float and type(array[0][0]) == int:
  27. if int(target) == target:
  28. return False
  29. target = int(target)
  30. elif type(target) == int and type(array[0][0]) == float:
  31. target = float(int)
  32. elif type(target) != type(array[0][0]): # 浮点数的相等判断问题需要特别注意, 一般都是判断两个数的差值是否小于一个特别小的数。这里不展开分析。
  33. return False
  34. i = colnum - 1
  35. j = 0
  36. while i >= 0 and j < rawnum:
  37. if array[j][i] < target:
  38. j += 1
  39. elif array[j][i] > target:
  40. i -= 1
  41. else:
  42. return True
  43. return False
  44. # 扩展, 输出数组中target的个数
  45. def searchMatrix(self, matrix, target):
  46. if matrix == None or len(matrix) == 0:
  47. return 0
  48. rows = len(matrix)
  49. cols = len(matrix[0])
  50. row, col = 0, cols - 1
  51. count = 0
  52. while row <= rows - 1 and col >= 0:
  53. if matrix[row][col] > target:
  54. col -= 1
  55. elif matrix[row][col] < target:
  56. row += 1
  57. else:
  58. count += 1
  59. col -= 1
  60. return count
  61. array = [[1, 2, 8, 9],
  62. [2, 4, 9, 12],
  63. [4, 7, 10, 13],
  64. [6, 8, 11, 15]]
  65. array2 = []
  66. array3 = [['a', 'b', 'c'],
  67. ['b', 'c', 'd']]
  68. array4 = [[62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],[63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82],[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83],[66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]]
  69. findtarget = Solution()
  70. print(findtarget.Find(array, 10))
  71. print(findtarget.Find(array, 30))
  72. print(findtarget.Find(array, 13.0))
  73. print(findtarget.Find(array, ''))
  74. print(findtarget.Find(array2, 10))
  75. print(findtarget.Find(array3, 'b'))
  76. print(findtarget.searchMatrix(array4, 81))
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python实现Singleton模式
« 上一篇 01-21
Python替换空格
下一篇 » 01-21

发表评论