当前位置:   article > 正文

Numpy数组和python列表比较和查找字符串的方法_numpy数组查找字符串

numpy数组查找字符串

python可以直接比较字符串内容是否相等,比如

  1. date_str1 = "2020-02-03"
  2. date_str2 = "2020-02-03"
  3. if date_str1 == date_str2:
  4. print("日期字符串相等")
  5. else:
  6. print("日期字符串不相等")

如果是字符串列表,可以使用.all函数和.any函数,或者直接使用==运算符,依次比较每一个字符串元素是否相等,若全部相等则输出相等,比如

  1. #直接使用==
  2. date_str1 = ["2020-02-03","2020-04-09"]
  3. date_str2 = ["2020-02-03","2020-04-09"]
  4. if date_str1 == date_str2:
  5. print("列表字符串相等")
  6. else:
  7. print("列表字符串不相等")
  8. #使用all函数
  9. list1 = [1, 2, 3]
  10. list2 = [1, 2, 3]
  11. if all(x == y for x, y in zip(list1, list2)):
  12. print("列表相等")
  13. else:
  14. print("列表不相等")

而在numpy的数组也可以直接比较,但返回的是一个bool列表,存储每一个元素是否相等的布尔值,比如

  1. import numpy as np
  2. date_str1 = np.asarray(['2020-01-01', '2020-02-02', '2020-03-03'])
  3. date_str2 = np.asarray(['2020-01-01', '2020-02-02', '2020-03-03'])
  4. print(date_str1==date_str2)

输出结果为

 注意以上输出为一个布尔数组,而且要求比较的数组维度长度均相等。

但如果只想要返回一个布尔值呢?可以使用numpy中的array_equal函数,如下:

  1. import numpy as np
  2. date_str1 = ['2020-01-01', '2020-02-02', '2020-03-03']
  3. date_str2 = ['2020-01-01', '2020-02-02', '2020-03-03']
  4. if np.array_equal(date_str1,date_str2):
  5. print("列表字符串相等")
  6. else:
  7. print("列表字符串不相等")

numpy还提供了很多其他函数,比如array_equiv,char.equal,这些函数大同小异,我觉得记住array_equal就行了

如果想要查找指定字符串在数组或列表中的位置呢?方法是不同的,因为列表和数组不是相同的数据结构

先说在列表中指定数据的方法,可以使用index函数,但要注意确定指定数据是否在列表中,如果没在会引发错误,要么提前确定,要么额外编写处理异常的方法

  1. my_list = ['apple', 'banana', 'orange', 'apple', 'grape']
  2. search_str = 'orange'
  3. if search_str in my_list:
  4. index = my_list.index(search_str)
  5. print(index) # 输出:2
  6. else:
  7. print("字符串不存在于列表中")

此外也可以使用python内置函数enumerate

  1. my_list = ['apple', 'banana', 'orange', 'apple', 'grape']
  2. search_str = 'apple'
  3. indices = [index for index, value in enumerate(my_list) if value == search_str]
  4. print(indices) # 输出:[0, 3]

注意这种方法可以查询到所有与目标字符串相匹配的索引,而且如果没有找到不会引发错误,顶多返回一个空列表,另外说明以下以上方法不仅适用于字符串,也适用于其他类型数据

接下来介绍numpy数组中查询指定数据的方法

  1. 使用条件查找
  2. 使用where函数
  3. 使用vectorize函数

这几种方法如下:

  1. import numpy as np
  2. #条件索引
  3. arr = np.array(['apple', 'banana', 'orange'])
  4. condition = np.char.find(arr, 'an') != -1
  5. result = arr[condition]
  6. print(result)
  7. #where函数
  8. arr = np.array(['apple', 'banana', 'orange'])
  9. condition = np.char.find(arr, 'an') != -1
  10. result = np.where(condition)
  11. print(arr[result])
  12. #vectorize函数
  13. arr = np.array(['apple', 'banana', 'orange'])
  14. condition = np.vectorize(lambda s: 'an' in s)(arr)
  15. result = arr[condition]
  16. print(result)

输出结果为:

  1. ['banana' 'orange']
  2. ['banana' 'orange']
  3. ['banana' 'orange']
  4. [Finished in 284ms]

以上介绍了numpy数组和python列表比较和查找字符串的常用方法,作者水平有限,如有不足,敬请见谅!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/357248
推荐阅读
相关标签
  

闽ICP备14008679号