python可以直接比较字符串内容是否相等,比如
date_str1 = "2020-02-03"
date_str2 = "2020-02-03"
if date_str1 == date_str2:
print("日期字符串相等")
else:
print("日期字符串不相等")
如果是字符串列表,可以使用.all函数和.any函数,或者直接使用==运算符,依次比较每一个字符串元素是否相等,若全部相等则输出相等,比如
#直接使用==
date_str1 = ["2020-02-03","2020-04-09"]
date_str2 = ["2020-02-03","2020-04-09"]
if date_str1 == date_str2:
print("列表字符串相等")
else:
print("列表字符串不相等")
#使用all函数
list1 = [1, 2, 3]
list2 = [1, 2, 3]
if all(x == y for x, y in zip(list1, list2)):
print("列表相等")
else:
print("列表不相等")
而在numpy的数组也可以直接比较,但返回的是一个bool列表,存储每一个元素是否相等的布尔值,比如
import numpy as np
date_str1 = np.asarray(['2020-01-01', '2020-02-02', '2020-03-03'])
date_str2 = np.asarray(['2020-01-01', '2020-02-02', '2020-03-03'])
print(date_str1==date_str2)
输出结果为
注意以上输出为一个布尔数组,而且要求比较的数组维度长度均相等。
但如果只想要返回一个布尔值呢?可以使用numpy中的array_equal函数,如下:
import numpy as np
date_str1 = ['2020-01-01', '2020-02-02', '2020-03-03']
date_str2 = ['2020-01-01', '2020-02-02', '2020-03-03']
if np.array_equal(date_str1,date_str2):
print("列表字符串相等")
else:
print("列表字符串不相等")
numpy还提供了很多其他函数,比如array_equiv,char.equal,这些函数大同小异,我觉得记住array_equal就行了
如果想要查找指定字符串在数组或列表中的位置呢?方法是不同的,因为列表和数组不是相同的数据结构
先说在列表中指定数据的方法,可以使用index函数,但要注意确定指定数据是否在列表中,如果没在会引发错误,要么提前确定,要么额外编写处理异常的方法
my_list = ['apple', 'banana', 'orange', 'apple', 'grape']
search_str = 'orange'
if search_str in my_list:
index = my_list.index(search_str)
print(index) # 输出:2
else:
print("字符串不存在于列表中")
此外也可以使用python内置函数enumerate
my_list = ['apple', 'banana', 'orange', 'apple', 'grape']
search_str = 'apple'
indices = [index for index, value in enumerate(my_list) if value == search_str]
print(indices) # 输出:[0, 3]
注意这种方法可以查询到所有与目标字符串相匹配的索引,而且如果没有找到不会引发错误,顶多返回一个空列表,另外说明以下以上方法不仅适用于字符串,也适用于其他类型数据
接下来介绍numpy数组中查询指定数据的方法
- 使用条件查找
- 使用where函数
- 使用vectorize函数
这几种方法如下:
import numpy as np
#条件索引
arr = np.array(['apple', 'banana', 'orange'])
condition = np.char.find(arr, 'an') != -1
result = arr[condition]
print(result)
#where函数
arr = np.array(['apple', 'banana', 'orange'])
condition = np.char.find(arr, 'an') != -1
result = np.where(condition)
print(arr[result])
#vectorize函数
arr = np.array(['apple', 'banana', 'orange'])
condition = np.vectorize(lambda s: 'an' in s)(arr)
result = arr[condition]
print(result)
输出结果为:
['banana' 'orange']
['banana' 'orange']
['banana' 'orange']
[Finished in 284ms]
以上介绍了numpy数组和python列表比较和查找字符串的常用方法,作者水平有限,如有不足,敬请见谅!