根据字符串的长度从列表中删除字符串?

Removing strings from a list dependent on their length?

提问人:Raging Rhino 提问时间:1/13/2022 更新时间:1/13/2022 访问量:45

问:

如果字符串的长度大于 5,我试图从此字符串列表中删除任何字符串。我不知道为什么它只删除了似乎是随机字符串的内容。请帮忙。代码的子列表部分的项只是将列表列表更改为普通的字符串列表。

list2 = [['name'],['number'],['continue'],['stop'],['signify'],['tester'],['racer'],['stopping']]
li = [item for sublist in list2 for item in sublist]
var=0
for words in li:
if len(li[var])>5:
    li.pop()
var+=1
print(li)

输出为:['name', 'number', 'continue', 'stop', 'signify']

Python 字符串 列表 循环 嵌套列表

评论

1赞 1/13/2022
为什么每个字符串都包含在子列表中?
0赞 John Gordon 1/13/2022
结果是随机的,因为您在迭代列表的同时从列表中删除了内容。别这样。
0赞 Kavindu Nilshan 2/11/2022
请检查代码,因为它会引发 IndentationError。
0赞 Kavindu Nilshan 2/11/2022
请记住,除非您指定了位置,否则 li.pop() 始终删除列表的最后一个值。

答:

1赞 Pedro Maia 1/13/2022 #1

只需在展平列表时包含复选:

list2 = [['name'],['number'],['continue'],['stop'],['signify'],['tester'],['racer'],['stopping']]
li = [item for sublist in list2 for item in sublist if len(item) <= 5]
['name', 'stop', 'racer']
0赞 user17903384 1/13/2022 #2

您可以使用列表推导来构建仅包含长度不超过 5 个的项目的新列表。

>>> l = ['123456', '123', '12345', '1', '1234567', '12', '1234567']
>>> l = [x for x in l if len(x) <= 5]
>>> l
['123', '12345', '1', '12']
0赞 Andrey 1/13/2022 #3
list(filter(lambda x: len(x[0]) <= 5, list2))