使用 Python 在字符串列表中查找前缀频率


在这篇文章中,我们将学习如何使用 Python 在字符串列表中查找前缀频率。在 Python 中解决此程序有多种方法,我们将了解其中的一些方法。

查找前缀频率有助于查找字符串中单词使用模式和分布。

方法 1:使用简单的 for 循环

示例

def find_prefix_freq(strings, prefix):
   count = 0
   for string in strings:
      if string.startswith(prefix):
         count += 1
   return count

strings = ['apple', 'aptitude', 'approve', 'aplaude','application', 'applause' 'apologize']
prefix = 'app'
print("Frequency of prefix "+ prefix + " is: "+ str(find_prefix_freq(strings, prefix)))

输出

Frequency of prefix app is: 4

解释

此函数接受两个参数:字符串和前缀。在函数内部,我们有一个 count 变量,它将计算具有相同前缀的字符串的总数。使用 for 循环,我们将遍历每个字符串,并使用startswith() 方法检查它是否以给定前缀开头,如果是,则 count 将增加 1。

方法 2:使用列表推导式

使用列表推导式方法,我们可以检查查找具有与给定前缀字符串相同的前缀的字符串。它为我们提供了一种过滤以给定前缀开头的字符串的方法。

示例

def find_prefix_freq(strings, prefix):
   filtered_strings = [string for string in strings if string.startswith(prefix)]
   count = len(filtered_strings)
   return count
    
strings = ['apple', 'aptitude', 'approve', 'aplaude','application', 'applause' 'apologize']
prefix = 'app'
print("Frequency of prefix "+ prefix + " is: "+ str(find_prefix_freq(strings, prefix)))

输出

Frequency of prefix app is: 4

解释

此函数接受两个参数:字符串和前缀。在函数内部,我们将使用列表推导式创建新的列表 filtered_strings。列表推导式迭代字符串列表中的每个字符串,并使用 startswith() 方法检查字符串是否以给定前缀开头。仅满足此条件的字符串才会添加到 filtered_strings 列表中。我们将使用 len() 函数获取以给定前缀开头的字符串的计数。

方法 3:使用 Counter 类

在此方法中,我们将使用 collections 模块中的 Counter 类。它为我们提供了一种简洁的方法来计算集合中元素的出现次数。

示例

from collections import Counter

def find_prefix_freq(strings, prefix):
   pref = [string[:len(prefix)] for string in strings if string.startswith(prefix)]
   prefix_freq = Counter(pref)
   count = prefix_freq[prefix]
   return count

strings = ['apple', 'aptitude', 'approve', 'aplaude','application', 'applause' 'apologize']
prefix = 'app'
print("Frequency of prefix "+ prefix + " is: "+ str(find_prefix_freq(strings, prefix)))

输出

Frequency of prefix app is: 4

解释

在这里,我们从 collections 模块导入 Counter 类。Counter 类帮助我们找到任何列表或可迭代对象的频率。与方法 3 相同,我们将使用列表推导式创建新的列表 pref。列表推导式将迭代列表中的每个字符串,并使用 startswith() 方法检查字符串是否以给定前缀开头,并使用切片 [:len(prefix)] 提取该特定部分。通过这种方式,我们可以将满足条件的字符串添加到 pref 列表中。

之后,我们将使用 Counter 类通过传入 pref 列表创建 prefix_freq 对象。使用 prefix_freq[pref],我们可以获取与 pref 关联的计数并将其分配给 count 变量。

方法 4:使用 Pandas DataFrame

当我们有更大的字符串大小或字符串的复杂结构时,我们可以使用 DataFrame 来计算字符串列表中的前缀。在这里,我们将字符串列表转换为 DataFrame,然后使用内置函数来计算包含前缀的字符串。

示例

import pandas as pd

def find_prefix_freq(strings, prefix):
   df = pd.DataFrame(strings, columns=['String'])
   df['Prefix'] = df['String'].apply(lambda x: x[:len(prefix)])
   prefix_freq = df.groupby('Prefix').size().to_dict()
   count = prefix_freq.get(prefix, 0)
   return count

strings = ['apple', 'aptitude', 'approve', 'aplaude','application', 'applause' 'apologize']
prefix = 'app'
print("Frequency of prefix "+ prefix + " is: "+ str(find_prefix_freq(strings, prefix)))

输出

Frequency of prefix app is: 4

解释

在此程序中,我们导入了 pandas 库。我们的函数接受两个参数:字符串和前缀。在函数内部,我们使用 pd.DataFrame() 构造函数创建了一个 DataFrame 对象 df。在构造函数中,字符串列表作为数据传递,并为其分配了一个名为 string 的列。使用 .apply() 方法将一个新列添加到 df DataFrame 中。使用 lambda 函数,我们将对每个字符串应用 [:len(prefix)] 字符串切片并提取前缀部分。

使用 DataFrame 上的 groupby 方法,我们将根据 prefix 列中的值对行进行分组。

方法 5:使用正则表达式

正则表达式被认为是用于复杂字符串结构的模式匹配的非常强大的工具。在这里,我们使用“re”模块搜索与给定前缀匹配的字符串并计算匹配的总数。

示例

import re

def find_prefix_freq(strings, prefix):
   pattern = f'^{prefix}'
   count = sum(1 for string in strings if re.match(pattern, string))
   return count

strings = ['apple', 'aptitude', 'approve', 'aplaude','application', 'applause' 'apologize']
prefix = 'app'
print("Frequency of prefix "+ prefix + " is: "+ str(find_prefix_freq(strings, prefix)))

输出

Frequency of prefix app is: 4

解释

在上面的程序中,我们导入了正则表达式,这对于前缀匹配是必需的。在函数内部,我们将首先使用 ^ 符号构造正则表达式,它表示字符串的开头,后跟前缀。构造正则表达式后,我们将使用列表推导式技术迭代列表中的每个字符串,并首先对每个字符串使用 re.match() 函数检查它是否与我们使用正则表达式构造的模式匹配。如果模式匹配,我们将增加我们的计数。

因此,这些是一些可用于查找字符串列表中前缀频率的方法。每种方法都有其自身的优势,例如性能和简单性。使用这些方法,您可以从字符串中提取有价值的信息。您可以根据您的偏好和预期性能选择任何方法并应用它以获得有关前缀频率的洞察力。

更新于:2023-10-13

197 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.