如何在Python中过滤字符串列表-演道网
使用另一个列表过滤字符串列表
本示例说明了如何在不使用任何方法的情况下过滤字符串列表中的数据。 字符串列表在此使用另一个列表进行过滤。 在此,声明了两个列表变量,名称分别为list1和list2。 使用list1的值过滤list2的值。 该脚本会将list2的每个值的第一个单词与list1的值进行匹配,并打印list1中不存在的那些值。
#coding=utf-8
# 声明两个列表变量
list1 = ['Python', 'PHP', 'Java', 'Bash']
list2 = ['JavaScript是客户端脚本语言',
'PHP是服务器端脚本语言',
'Java是一种编程语言',
'Kotlin是一种静态编程语言']
# 根据第一个列表过滤第二个列表
filter_data = [x for x in list2 if
all(y not in x for y in list1)]
# 在过滤前和过滤后打印列表数据
print("第一个列表的内容:", list1)
print("第二个列表的内容:", list2)
print("过滤后的第二个列表的内容:", filter_data)
运行脚本。 在此,list1不包含单词“Kotlin”。 输出将仅包含list2中的一个值,即 [‘Kotlin是一种静态编程语言’]。
输出如下:
第一个列表的内容: [‘Python’, ‘PHP’, ‘Java’, ‘Bash’]
第二个列表的内容: [‘JavaScript是客户端脚本语言’, ‘PHP是服务器端脚本语言’, ‘Java是一种编程语言’, ‘Kotlin是一种静态编程语言’]
过滤后的第二个列表的内容: [‘Kotlin是一种静态编程语言’]
使用另一个列表和自定义函数过滤字符串列表
本示例说明如何使用另一个列表和自定义过滤器功能过滤字符串列表。 该脚本包含两个名为list1和list2的列表变量。 自定义过滤器功能将找出两个列表变量的公共值。
# 声明两个列表变量
list1 = ['100', '67', '39', '505', '122', '287', '399']
list2 = ['70', '100', '308', '415', '362', '230']
# 声明一个函数来过滤第一个列表中的数据
def Filter(list1, list2):
return [n for n in list1 if
any(m in n for m in list2)]
# 在过滤器之前和之后打印列表数据
print("list1的的内容:", list1)
print("list2的的内容:", list2)
print("过滤后的数据",Filter(list1, list2))
运行脚本。 两个列表变量中都存在100的值。 运行脚本后,将生成以下输出。
list1的的内容: [‘100′, ’67’, ’39’, ‘505’, ‘122’, ‘287’, ‘399’]
list2的的内容: [’70’, ‘100’, ‘308’, ‘415’, ‘362’, ‘230’]
过滤后的数据 [‘100’]
使用正则表达式过滤字符串列表
通过使用前两个示例中的all()和any()方法来过滤列表。 在此示例中,使用正则表达式从列表中过滤数据。 正则表达式是一种模式,通过该模式可以搜索或匹配任何数据。 Python中使用’re’模块在脚本中应用正则表达式。 在此,使用主题代码声明列表。 正则表达式用于过滤以“ CSE”开头的主题代码。 正则表达式模式中使用’^’符号在文本的开头进行搜索。
# 导入re模块以使用正则表达式
import re
# 声明列表包含科目编号
sublist = ['IDC-108', 'OKY-309', 'IDC-709', 'PHP-102', 'MIO-801']
# 声明过滤功能
def Filter(datalist):
# 根据列表中的正则表达式搜索数据
return [val for val in datalist
if re.search(r'^IDC', val)]
# 打印过滤器数据
print(Filter(sublist))
运行脚本。 子列表变量包含两个以“IDC”开头的值。 运行脚本后,将显示以下输出。
[‘IDC-108’, ‘IDC-709’]
使用lamda表达式过滤字符串列表
本示例说明了使用lamda表达式从字符串列表中过滤数据。 在这里,名为search_word的列表变量用于从名为text的文本变量中过滤内容。 通过使用split()方法,基于空间将文本内容转换为名为text_word的列表。 lamda表达式将忽略text_word中存在于search_word中的那些值,并通过添加空格将过滤后的值存储在变量中。
# 声明一个包含linuxidc_word中关键词的列表
linuxidc_word = ["系统", "linuxidc", "Python", "Kotlin"]
# 定义文本,从列表中搜索单词
text = "Linux公社 linuxidc 是专业的 Linux 系统 门户网站,实时发布 最新 Kotlin 资讯!"
# 根据空格分割文本并将单词存储在列表中
text_word = text.split()
# 使用lambda表达式过滤数据
filter_text = ' '.join((filter(lambda val: val not in linuxidc_word, text_word)))
# 在过滤前和过滤后打印文本
print("\n过滤前的文本:\n", text)
print("过滤后的文本:\n", filter_text)
运行脚本。 运行脚本后,将显示以下输出。
过滤前的文本:
Linux公社 linuxidc 是专业的 Linux 系统 门户网站,实时发布 最新 Kotlin 资讯!
过滤后的文本:
Linux公社 是专业的 Linux 门户网站,实时发布 最新 资讯!
使用filter()方法过滤字符串列表
filter()方法接受两个参数。 第一个参数采用函数名称或“ None”,第二个参数采用列表变量的名称作为值。 filter()方法如果返回true,则从列表中存储这些数据,否则将丢弃该数据。 在此,第一个参数值不指定任何值。 所有不为false的值将从列表中检索为已过滤数据。
#声明混合数据列表
listData = ['linuxidc', 90, 9, 'com', 100, False, 22, True, '1']
# 使用None和列表调用filter()方法
filteredData = filter(None, listData)
#过滤数据后打印列表
print('过滤后的列表:')
for val in filteredData:
print(val)
运行脚本。该列表只包含一个false值,在过滤后的数据中将省略该false值。运行脚本后将出现以下输出。
总结:
当您需要从列表中搜索和检索特定值时, 过滤非常有用。我希望上面的例子能帮助读者理解从字符串列表中过滤数据的方法。
更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.as
转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn