我有一个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)]
但是这也会在字符串中的任何地方打印出模式,而不仅仅是结尾部分。
答案 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)],
。