【问题标题】:Python: deleting a string object in a list based on the length [duplicate]Python:根据长度删除列表中的字符串对象[重复]
【发布时间】:2017-08-12 21:51:59
【问题描述】:

如果字符数为 5 或更少,我想从列表中删除每个城市。

cities = ["New York", "Shanghai", "Munich", "Toyko", "Dubai"]
j = 0
for i in cities:
    if len(i) <= 5:
        del cities[j]
    j += 1

只删除第一个不超过 5 个字符的城市。但不是第二个。

我也试过这个:

i = 0
while i < len(cities):
    if len(cities[i]) <= 5:
        del cities[i]
    i += 1

但它给了我同样的结果!!

更新: 最简单的方法就是添加一个切片:

for i in cities[:]:
        if len(i) <= 5:
            cities.remove(i)       

# output: ["New York", "Shanghai", "Munich"]

【问题讨论】:

  • 您在迭代列表时更改了列表,这会导致问题。
  • 谢谢@Kasramvd 但那该怎么做呢?还有更好的方法吗?
  • 你应该使用列表理解:[i for i in cities if len(i) &gt;= 5]
  • 谢谢@Kasramvd 感谢!

标签: python python-3.x list


【解决方案1】:

您所描述的内容称为Filter 操作。你应该看看文档。以下代码使用它在一行代码中生成全新的城市名称列表。构建一个新列表可以防止你在改变你的记忆时犯下的一整类错误。 Referential Transparency 上的 wiki 文章是一个很好的起点。

cities = ["New York", "Shanghai", "Munich", "Toyko", "Dubai"]

citiesWithLongNames = filter (lambda cityName: len (cityName) > 5, cities)

print (citiesWithLongNames) # => ['New York', 'Shanghai', 'Munich']

您还应该阅读所有 built in functions,您会发现 python 中已经内置了很多东西,使您不必手动实现琐事。


奖励:使用列表理解:

print ([city for city in cities if len (city) > 5])

比嵌套循环干净得多。 :)

【讨论】:

  • 非常感谢,这真的很有帮助!因为我是新人,所以我不能给你评分:(
  • 很高兴能提供帮助。您仍然可以将答案标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2018-02-23
相关资源
最近更新 更多