Python:根据长度删除列表中的字符串对象

时间:2017-08-12 13:00:45

标签: python python-3.x list

如果字符数为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"]

1 个答案:

答案 0 :(得分:0)

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

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])

比嵌套循环更清晰。 :)