Python从lis中删除特定的重复项

2024-04-20 07:14:13 发布

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

我想从列表中删除特定的重复项。使用Perl,我将使用以下代码完成任务:

my @list = ( 'a1', 'a1', 'b1', 'b1' );

my %seen;
@list = grep( !/a\d/ || !$seen{ $_ }++, @list );

想要的结果是:

@list = ( 'a1', 'b1', 'b1' );

如何在python3中使用正则表达式和列表理解来实现这一点。谢谢。你知道吗


Tags: 代码列表mya1greppython3perllist
3条回答

下面是另一个解决方案,使用list(set(stuff))stuff生成一个list的唯一内容(因为set会自动消除重复内容):

In [1]: import re

In [2]: l = ["a1", "a1", "b1", "b1"]

In [3]: items_to_dedupe = [x for x in l if re.match(r"a\d", x)]

In [4]: leave_alone = [x for x in l if x not in items_to_dedupe]

In [5]: list(set(items_to_dedupe)) + leave_alone
Out[5]: ['a1', 'b1', 'b1']

可以使用^{}^{}

>>> list(chain(*[[i[0]] if 'a1' in i else i for i in [list(g) for _,g in groupby(sorted(l))]]))
['a1', 'b1', 'b1']

如果您只想使用regex,您可以连接n使用re.sub的元素,但请注意,它适用于这种特殊情况!,是分隔符!地址:

>>> l =['a1', 'a1', 'b1', 'b1']
>>> re.sub(r'(a1,)+','a1,',','.join(sorted(l))).split(',')
['a1', 'b1', 'b1']
import re
from functools import reduce  # this import is not needed in python 2.*

l = ['a1', 'a1', 'b1', 'b1']

print reduce(lambda acc, el: acc if re.match(r'a\d', el) and el in acc else acc + [el], l, [])

抱歉,这是没有列表理解的解决方案。严格要求吗?你知道吗

相关问题 更多 >