【问题标题】:Removing strings from a list dependent on their length?根据长度从列表中删除字符串?
【发布时间】:2022-01-13 01:03:08
【问题描述】:

如果字符串的长度大于 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']

【问题讨论】:

  • 为什么每个字符串都包含在子列表中?
  • 结果是随机的,因为您在迭代列表的同时从列表中删除内容。不要那样做。
  • 请检查代码,因为它会引发 IndentationError。
  • 记住 li.pop() 总是删除列表的最后一个值,除非你指定了位置。

标签: python string list loops nested-lists


【解决方案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']

【讨论】:

    【解决方案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']
    

    【讨论】:

      【解决方案3】:
      list(filter(lambda x: len(x[0]) <= 5, list2))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2019-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多