如果字符数为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"]
答案 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])
比嵌套循环更清晰。 :)