You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:44:20