基于以一组子字符串之一结尾的Python列表切片

2024-05-02 08:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python列表

list1 = ['TC_TEST1', 'TC_TEST1_TEST2', 'TC_TEST3', 'TC_TEST1TEST2']

sublist1 = ['TEST1', 'TEST3']

期望输出为

result = ['TC_TEST1', 'TC_TEST3']

它不应该包含子列表1中出现在字符串中间或其他位置的模式。你知道吗

我试过用

result = [s for s in list1 if any(xs in s for xs in sublist1)]

但这也会打印出字符串中出现的任何模式,而不仅仅是结束部分。你知道吗


Tags: 字符串in列表forif模式resulttc
3条回答

不要在中使用而是使用endswith()函数,所以只要用result = [s for s in list1 if any(s.endswith(xs) for xs in sublist1)],替换result = [s for s in list1 if any(xs in s for xs in sublist1)] 。你知道吗

你可以试试这个:

list1 = {'TC_TEST1', 'TC_TEST1_TEST2', 'TC_TEST3', 'TC_TEST1TEST2'}
sublist1 = { 'TEST1', 'TEST3'}
final_list = [i for i in list1 if any(i.endswith(b) for b in sublist1)]

输出:

set(['TC_TEST3', 'TC_TEST1'])

元组高级功能:

sublist1 = ('TEST1', 'TEST3')
final_list = [i for i in list1 if i.endswith(sublist1)]

首先,您需要注意,您没有定义python列表,但是设置了。这些是从定义的集合派生的等价列表(注意[]表示法):

list1 = ['TC_TEST1TEST2', 'TC_TEST3', 'TC_TEST1', 'TC_TEST1_TEST2']
sublist1 = ['TEST1', 'TEST3']

如果需要筛选仅以可能的子字符串列表结尾的字符串,可以调用Python字符串的endswith方法,将字符串元组作为参数传递。这样,可以使用以下表达式导出所需的输出:

result = [s for s in list1 if s.endswith(tuple(sublist1))]

实际输出为:

>>> result
['TC_TEST3', 'TC_TEST1']

相关问题 更多 >