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

Python 从字符串列表中删除短于k的字符串,python,list,Python,List,我有一个字符串列表,如下所示: mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc', 'aaaa', 'bbbb', 'cccc'] 我只需要提取k=4个字符的字符串,因此输出为: minlist = ['aaaa', 'bbbb', 'cccc'] 如何有效地实施?尝试以下方法: def get_minlist(my_list, k): return [item for item in my_list if

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

mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc',  'aaaa', 'bbbb', 'cccc']
我只需要提取k=4个字符的字符串,因此输出为:

minlist = ['aaaa', 'bbbb', 'cccc']
如何有效地实施?

尝试以下方法:

def get_minlist(my_list, k):
    return [item for item in my_list if len(item) == k]
mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc',  'aaaa', 'bbbb', 'cccc']
minilist=[]

for i in range (len(mylist)):
    if len(mylist[i]) == 4:
        minilist.append(mylist[i])

print(minilist)
您可以将其用作:

打印(获取最小列表([“abc”、“ab”、“a”]、2))
结果:

['ab']

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

这正是该函数要用于的情况类型:

>>> 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']
filter
接受两个参数:第一个是函数,第二个是iterable。该函数将应用于iterable的每个元素,如果该函数返回
True
,则该元素将被保留,如果该函数返回
False
,则该元素将被排除
filter
返回根据传入函数过滤这些元素的结果


作为旁注,
filter
函数返回一个
filter
对象,该对象是迭代器,而不是
list
(这就是包含显式
list
调用的原因)。因此,如果只是对值进行迭代,则不需要将其转换为
列表
,因为这样效率更高

可以使用
len()
检查字符串的长度

结果:

['aaaa', 'bbbb', 'cccc']
试试这个:

def get_minlist(my_list, k):
    return [item for item in my_list if len(item) == k]
mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc',  'aaaa', 'bbbb', 'cccc']
minilist=[]

for i in range (len(mylist)):
    if len(mylist[i]) == 4:
        minilist.append(mylist[i])

print(minilist)

正如我在评论中所说,您可以尝试以下方式:

mylist = ['a', 'b', 'c', 'aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc',  'aaaa', 'bbbb', 'cccc']

newlst=[]
for item in mylist:
    if len(item) == 4:
        newlst.append(item)

print (newlst)
在这里,我们使用的概念称为列表理解,列表理解意味着它是一个简单的方法来创建一个列表的基础上,一些iterables。 注意:-iterable是可以循环的东西 在列表理解创建过程中,来自iterables(ex:-mylist)的元素可以有条件地包括在新列表中,并根据需要进行转换

列表理解的语法:-

注:-此符号“|”用于表示语法,分为三部分,前两部分为必填部分,最后一部分为可选部分

[give me this | from the collection | with this condition ]

[mandatory    |  mandatory          |    optional ]

[var for var in iterables condition ] 

filtered_list=[item for item in mylist if len(item)==4]
print(filtered list)

在for循环遍历mylist之前,需要创建一个空列表。然后,你使用一个if条件将每次迭代都附加len(4)到你的空列表中。@K.Land\u bioinfo是的,但在一般情况下,这会非常需要计算,我想可能会有更有效的方法。我对编程还相当陌生,所以我还不擅长提高代码效率的技巧和窍门。@Georgy这是类似的,我接受的anwser更适合我的问题。没有必要关闭该窗口question@roygbiv通常的做法是将一个问题作为一个更广泛问题的重复来结束。这没什么不好的。您的问题不会被删除,而是作为一个路标,将人们指向规范的重复目标。有关更多信息,请参阅。