从字符串列表中删除短于 k 的字符串

roy*_*biv 2 python list

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

mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc',  'aaaa', 'bbbb', 'cccc']
Run Code Online (Sandbox Code Playgroud)

我只需要提取 k=4 个字符的字符串,所以输出将是:

minlist = ['aaaa', 'bbbb', 'cccc']
Run Code Online (Sandbox Code Playgroud)

如何有效实施?

xil*_*pex 5

尝试这个:

def get_minlist(my_list, k):
    return [item for item in my_list if len(item) == k]
Run Code Online (Sandbox Code Playgroud)

您可以将其用作:

def get_minlist(my_list, k):
    return [item for item in my_list if len(item) == k]
Run Code Online (Sandbox Code Playgroud)

结果:

['ab']
Run Code Online (Sandbox Code Playgroud)

代码是pythonic的,速度快,而且很容易理解。代码遍历列表中的项目,检查它们是否k长度,如果是,则保留它们。


awa*_*r99 5

这正是该filter函数适用的情况类型:

>>> mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc',  'aaaa', 'bbbb', 'cccc']
>>> minlist = list(filter(lambda i: len(i) == 4, mylist))
>>> minlist
['aaaa', 'bbbb', 'cccc']
Run Code Online (Sandbox Code Playgroud)

filter有两个参数:第一个是函数,第二个是可迭代的。该函数将应用于可迭代的每个元素,如果函数返回True,则保留该元素,如果函数返回False,则排除该元素。filter根据传入的函数返回过滤这些元素的结果

作为旁注,该filter函数返回一个filter对象,它是一个迭代器,而不是 a list(这list就是包含显式调用的原因)。因此,如果您只是简单地迭代这些值,则无需将其转换为 a,list因为这样会更高效