Python二维数组创建方法及words_in_texts函数实现求助
咱们逐个解决你的问题:
如何在Python中创建二维数组?
Python里创建二维数组有几种实用的方式,根据你的使用场景选就行:
纯Python嵌套列表(简单场景):如果只是需要一个基础的二维结构,用列表推导式最稳妥,能避免新手常见的坑:
# 生成3行4列、初始值为0的二维列表 two_d_list = [[0 for _ in range(4)] for _ in range(3)] print(two_d_list) # 输出: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]注意别用
[[0]*4]*3这种写法——它会让所有行指向同一个列表,修改其中一行会影响所有行。NumPy数组(数值计算首选):如果要做矩阵运算、数值分析,NumPy的二维数组是最佳选择:
import numpy as np # 创建3行4列的全0整数数组 two_d_array = np.zeros((3, 4), dtype=int) print(two_d_array) # 输出: # [[0 0 0 0] # [0 0 0 0] # [0 0 0 0]] # 也可以直接从Python列表转换 from_py_list = np.array([[1,2], [3,4], [5,6]])Pandas DataFrame(表格数据场景):如果处理的是结构化表格数据,用DataFrame更方便,还能随时转成NumPy数组:
import pandas as pd df = pd.DataFrame([[1,2], [3,4], [5,6]]) # 转换为NumPy数组 df_to_array = df.values
实现
words_in_texts函数 先明确需求:我们要生成一个0/1数组,每行对应texts里的一个文本,每列对应words里的一个词,元素为1表示对应文本包含对应词,否则为0。
这里给你两种实现方式,按需选择:
方法一:直观遍历法(适合理解逻辑)
import numpy as np import pandas as pd def words_in_texts(words, texts): ''' Args: words (list-like): 待查找的词 texts (Series): 待搜索的字符串序列 Returns: 由0和1组成的NumPy数组,形状为(n, p),其中n为文本数量,p为待查找词的数量 数组中[i,j]位置的元素为1表示第i个文本包含第j个词,否则为0 ''' result_rows = [] for text in texts: # 对每个词检查是否在当前文本中,生成一行0/1值 current_row = [1 if word in text else 0 for word in words] result_rows.append(current_row) # 转换为NumPy数组返回 return np.array(result_rows) # 测试你的示例 test_words = ['hello', 'bye', 'world'] test_texts = pd.Series(['hello', 'hello world hello']) print(words_in_texts(test_words, test_texts)) # 输出符合预期: # [[1 0 0] # [1 0 1]]
方法二:Pandas批量处理法(高效处理大数据)
如果要处理大量文本或词,用Pandas的str.contains批量处理速度更快:
import numpy as np import pandas as pd def words_in_texts(words, texts): ''' Args: words (list-like): 待查找的词 texts (Series): 待搜索的字符串序列 Returns: 由0和1组成的NumPy数组,形状为(n, p),其中n为文本数量,p为待查找词的数量 数组中[i,j]位置的元素为1表示第i个文本包含第j个词,否则为0 ''' # 为每个词生成布尔Series,拼接成DataFrame后转整数数组 match_df = pd.DataFrame({word: texts.str.contains(word) for word in words}) return match_df.values.astype(int) # 同样测试,结果一致 test_words = ['hello', 'bye', 'world'] test_texts = pd.Series(['hello', 'hello world hello']) print(words_in_texts(test_words, test_texts))
两种方法都能满足你的需求,第一种逻辑清晰易理解,第二种适合大规模数据场景。
内容的提问来源于stack exchange,提问作者user9287749
相关产品推荐
相关产品推荐

