在Python中,从字符串的一部分删除重复项的简单方法是什么?

在Python中,从字符串的一部分删除重复项的简单方法是什么?,python,algorithm,Python,Algorithm,我有一个字符串列表,如下所示: 1;213;164 2;213;164 3;213;164 4;213;164 5;213;164 6;213;164 7;213;164 8;213;164 9;145;112 10;145;112 11;145;112 12;145;112 13;145;112 14;145;112 15;145;112 16;145;112 17;145;112 1001;1;151 1002;2;81 1003;3;171 1004;4;31 1;213;164 9;1

我有一个字符串列表,如下所示:

1;213;164
2;213;164
3;213;164
4;213;164
5;213;164
6;213;164
7;213;164
8;213;164
9;145;112
10;145;112
11;145;112
12;145;112
13;145;112
14;145;112
15;145;112
16;145;112
17;145;112
1001;1;151
1002;2;81
1003;3;171
1004;4;31
1;213;164
9;145;112
1001;1;151
1002;2;81
1003;3;171
1004;4;31
我想删除第二个数字相同的所有重复项。所以在通过程序运行之后,我会得到如下结果:

1;213;164
2;213;164
3;213;164
4;213;164
5;213;164
6;213;164
7;213;164
8;213;164
9;145;112
10;145;112
11;145;112
12;145;112
13;145;112
14;145;112
15;145;112
16;145;112
17;145;112
1001;1;151
1002;2;81
1003;3;171
1004;4;31
1;213;164
9;145;112
1001;1;151
1002;2;81
1003;3;171
1004;4;31
但有点像

8;213;164
15;145;112
1001;1;151
1002;2;81
1003;3;171
1004;4;31

也应该是正确的。

您可以按此键对项目进行分组,然后使用每组中的第一个项目(假设
l
是您的列表)


您可以按此键对项目进行分组,然后使用每组中的第一个项目(假设
l
是您的列表)


以下是前几项的代码,请将我的列表与您的列表切换:

x = [
'7;213;164',
'8;213;164',
'9;145;112',
'10;145;112',
'11;145;112',
]
new_list = []
for i in x:
    check = True
    s_part = i[i.find(';'):]
    for j in new_list:
        if s_part in j:
            check = False
    if check == True:
        new_list.append(i)

print(new_list)
输出:

['7;213;164', '9;145;112']

以下是前几项的代码,请将我的列表与您的列表切换:

x = [
'7;213;164',
'8;213;164',
'9;145;112',
'10;145;112',
'11;145;112',
]
new_list = []
for i in x:
    check = True
    s_part = i[i.find(';'):]
    for j in new_list:
        if s_part in j:
            check = False
    if check == True:
        new_list.append(i)

print(new_list)
输出:

['7;213;164', '9;145;112']

下面是一个你可以使用的又好又快的技巧(假设
l
是你的列表):

不需要导入任何东西,并且尽可能快

通常,您可以定义:

def custom_unique(L, keyfunc):
    return list({ keyfunc(li): li for li in L }.values())

下面是一个你可以使用的又好又快的技巧(假设
l
是你的列表):

不需要导入任何东西,并且尽可能快

通常,您可以定义:

def custom_unique(L, keyfunc):
    return list({ keyfunc(li): li for li in L }.values())

请使用您尝试过的代码更新您的问题。请使用您尝试过的代码更新您的问题。只需更改为:
x.split(“;”[1]+”;“+x.split(“;”[2]
),此解决方案即可工作!我修正了我的答案,现在比你的建议稍微有效了一点。@OneLyner,请描述一下失败的地方,他要求第二个2个数字作为答案same@TomRon抱歉,我误读了:)您可能对我的答案感兴趣。只需更改为:
x.split(“;”[1]+”;“+x.split(“;”[2]
,此解决方案就可以了!我修正了我的答案,现在比你的建议稍微有效了一点。@OneLyner,请描述一下失败的地方,他要求第二个2个数字作为答案same@TomRon对不起,我误读了:)你可能对我的答案感兴趣。哦,这个解决方案很好。若我理解正确,它会生成一个字典,第二个2个数字作为键,整个字符串作为值。所以,每当相同的2个数字出现时,第一个数字就会被覆盖,并且不会重复。@vanjavk是的,就是这样,这个解决方案很好。若我理解正确,它会生成一个字典,第二个2个数字作为键,整个字符串作为值。所以,每当同样的两个数字出现时,第一个数字就会被覆盖,并且不会重复。@vanjavk是的,就是这样