根据特殊字符过滤项目列表-Python

时间:2020-06-23 05:38:18

标签: python list

我有以下列表:

my_list = [('-/1', '-/2'),('-/3', '4/-'), ('5/-', '-/6'), ('-/7', '-/8')]

基于/,我想以[(-/a, b/-) or (a/-, -/b)]的形式过滤列表项,其中ab是整数。在上面的示例中,我想获取值[('-/3', '4/-'), ('5/-', '-/6')]。这意味着仅排除[(a/-, b/-) and (-/a, -/b)]形式的所有项目。

为此,我尝试了以下python脚本。

new_list= [e for e in my_list if '-' in str(e[0]) and '-'  in str(e[1])]
print(new_list)

但是我得到了完整列表。

有什么方法可以在Python中获得上述结果吗?

3 个答案:

答案 0 :(得分:2)

[item for item in my_list if '/-' in ''.join(item) and '-/' in ''.join(item)]

答案 1 :(得分:0)

您可以尝试:

my_list = [('-/1', '-/2'),('-/3', '4/-'), ('5/-', '-/6'), ('-/7', '-/8')]
output_list = []
for data in my_list:
    temp = 0
    for sub_index, sub_data in enumerate(data):
        if sub_index == 0:
            if "-" == sub_data[0]:
                temp = 0
            elif "-" == sub_data[-1]:
                temp = -1
        else:
            if sub_data[temp] != "-":
                output_list.append(data)
print(output_list)

输出

[('-/3', '4/-'), ('5/-', '-/6')]

答案 2 :(得分:0)

    my_list = [('-/1', '-/2'),('-/3', '4/-'), ('5/-', '-/6'), ('-/7', '-/8')]
new_list = []
for tuple in my_list:
    if tuple[0][0:2] == '-/' and tuple[1][-2:] == '/-':
        new_list.append(tuple) # append  ('-/3', '4/-')
    if tuple[0][-2:] == '/-' and tuple[1][0:2] == '-/':
        new_list.append(tuple) # append ('5/-', '-/6')

print(new_list)

# if you don't mind sacrificing readability, here is a shorter version
# of the code from above 
my_list = [('-/1', '-/2'),('-/3', '4/-'), ('5/-', '-/6'), ('-/7', '-/8')]
d = [tuple for tuple in my_list if (tuple[0][0:2] == '-/' and tuple[1][-2:] == '/-' or tuple[0][-2:] == '/-' and tuple[1][0:2] == '-/')  ]
print(d)