list1 = ['.jpg', '.jpeg', '.png'] # 待对比列表
list2 = ['文件一.mp3', '文件二.jpg', '文件三jpg.mp4', '文件四.jpeg_copy'] # 原始列表
# 使用列表推导式来找出list2中包含list1中任何子字符串的元素
matching_elements = [elem for elem in list2 if any(ext in elem for ext in list1)]
# 输出结果
if matching_elements:
print("list2中有元素包含list1中的子字符串:", matching_elements)
else:
print("list2中没有元素包含list1中的子字符串。")
列表推导式的基本语法如下:
[表达式 for 元素 in 可迭代对象 if 条件]
- 表达式:它是你希望对每个元素进行的操作或转换。
- 元素:表示当前循环到的元素。
- 可迭代对象:你要遍历的对象,比如列表、元组、字符串等。
- 条件(可选):一个过滤条件,只有满足条件的元素才会被包含在生成的列表中。
- 使用列表推导式进行匹配:
- 列表推导式
[elem for elem in list2 if any(ext in elem for ext in list1)]中存在两个列表推导式,any()函数中的推导式ext in elem for ext in list1其中的ext in elem是其表达式
。 - 对于
list2
中的每一个元素elem
,执行if
条件判断。 - 在
if
条件中,使用any()
函数来检查list1
中的任何一个扩展名ext
是否是elem
的一部分(即ext in elem
是否为真)。 - 如果
any()
函数返回True
(意味着elem
包含list1
中的任何一个扩展名),则elem
被包含在最终的matching_elements
列表中。
- 列表推导式
- 详细匹配过程:
- 对于
'文件一.mp3'
:检查是否包含'.jpg'
,'.jpeg'
, 或'.png'
。都不包含,所以不会被添加到matching_elements
。 - 对于
'文件二.jpg'
:包含'.jpg'
,所以会被添加到matching_elements
。 - 对于
'文件三jpg.mp4'
:虽然它包含'jpg'
,但是'jpg'前面
缺少'
.'
,所以不会被添加到matching_elements
。 - 对于
'文件四.jpeg_copy'
:包含'.jpeg'
(尽管后面有_copy
),所以会被添加到matching_elements
。
- 对于
- 输出结果:list2中有元素包含list1中的子字符串: ['文件二.jpg', '文件四.jpeg_copy']
可用于根据类型查询素材后,根据素材名称验证素材是否符合格式。