为何在Python 3中无法使用.title()格式化列表中的字符串元素?
为什么列表中的字符串没有被
title()方法格式化? 哦,我懂你的困惑了——你明明调用了title()方法想把列表里的字符串变成首字母大写的格式,但运行后列表完全没变化,对吧?
问题出在Python字符串的不可变性上:字符串对象一旦创建就不能被修改,像title()这类字符串方法不会改变原字符串,而是会返回一个全新的、处理后的字符串副本。你现在的代码只是调用了title(),但没有把这个新生成的字符串存回列表对应的位置,所以原列表自然不会有任何变化。
先看你原来的代码:
days_of_week=['sun','mon','tues','wednes','thurs','fri','satur'] print(days_of_week) i=0 while i<=6: days_of_week[i].title() # 这里只调用方法,没把结果存回去 i+=1 print(days_of_week)
运行输出确实和你看到的一样:
['sun', 'mon', 'tues', 'wednes', 'thurs', 'fri', 'satur']
['sun', 'mon', 'tues', 'wednes', 'thurs', 'fri', 'satur']
修正方案
有两种简单的方式解决这个问题:
1. 在循环中赋值回列表索引
把title()返回的新字符串重新赋值给列表对应的位置:
days_of_week=['sun','mon','tues','wednes','thurs','fri','satur'] print(days_of_week) i=0 while i<=6: days_of_week[i] = days_of_week[i].title() # 保存处理后的新字符串 i+=1 print(days_of_week)
2. 用列表推导式(更Pythonic的写法)
直接生成一个处理后的新列表,代码更简洁易读:
days_of_week=['sun','mon','tues','wednes','thurs','fri','satur'] print(days_of_week) days_of_week = [day.title() for day in days_of_week] print(days_of_week)
两种方式运行后都会得到你想要的结果:
['Sun', 'Mon', 'Tues', 'Wednes', 'Thurs', 'Fri', 'Satur']
内容的提问来源于stack exchange,提问作者Akaleti 47
相关产品推荐
相关产品推荐

