基于以一组子串中的一个结束切片Python列表

时间:2017-11-06 15:46:00

标签: python list

我有一个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)]

但是这也会在字符串中的任何地方打印出模式,而不仅仅是结尾部分。

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

输出:

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

带元组的高级功能:

.tabs li {
    border: 1px solid transparent;
}

.tabs li:not(:last-child):not(:nth-child(2)):hover {
    background-color: rgba(132,141,149,0.05);
    border-color: rgba(228,230,232,0.25);
}

答案 1 :(得分:1)

首先,您需要注意您尚未定义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']

答案 2 :(得分:0)

使用endswith()函数代替使用 ,而只需将result = [s for s in list1 if any(xs in s for xs in sublist1)] 替换为result = [s for s in list1 if any(s.endswith(xs) for xs in sublist1)],