gpt4 book ai didi

为具有唯一长度的元素过滤列表的pythonic方法

转载 作者:太空狗 更新时间:2023-10-30 01:48:35 25 4
gpt4 key购买 nike

我想过滤一个列表,只留下具有唯一长度的第一个元素。我为它写了一个函数,但我相信应该有一种更简单的方法来实现它:

def uniq_len(_list):
from itertools import groupby
uniq_lens = list(set([x for x, g in groupby(_list, len)]))
all_goods = []
for elem in _list:
elem_len = len(elem)
try:
good = uniq_lens.pop([i for i, x in enumerate(uniq_lens) if x==elem_len][0])
if good:
all_goods.append(elem)
except IndexError as _e:
#print all_goods
pass
return all_goods

In [97]: jones
Out[97]: ['bob', 'james', 'jim', 'jon', 'bill', 'susie', 'jamie']

In [98]: uniq_len(jones)
Out[98]: ['bob', 'james', 'bill']

最佳答案

如果您只想要每个长度的任意字符串,以任意顺序,最简单的方法是首先将长度转换为字典,将长度映射为字符串,然后只读出值:

>>> {len(s): s for s in jones}.values()
dict_values(['jon', 'bill', 'jamie'])

如果您想要每个长度的第一个,并且您需要保留顺序,那么这只是来自itertools recipesunique_everseen ,以 len 为键:

>>> from more_itertools import unique_everseen
>>> list(unique_everseen(lst, key=len))
['bob', 'james', 'bill']

(如果您是 pip install more-itertools,它包括 itertools 文档中的所有方法,以及一些其他有用的东西。)

关于为具有唯一长度的元素过滤列表的pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com