作者ddavid (谎言接线生)
看板Python
标题Re: [问题] 如何去除回圈後多余的东西
时间Thu Dec 5 21:05:46 2019
如果一定要用for loop的话,在确定只有省略最後一次的情况下,我个人会比较
喜欢这种直接在後做一次的方式。
a = [1, 2, 3, 4, 5]
last_index = len(a) - 1
for i in range(last_index):
print(a[i], end=",")
print(a[last_index])
之所以要用个last_index,只不过是不想要进行两次len(a)取长度而已,可省略
这个变数直接把last_index都写成len(a) - 1就好,行数上更精简一点。
比较重要的是不要直接for i in a而是改用index,这样我们就可以避开必须判
读哪一个元素是最後一个的问题,虽然也可以这麽写:
for i in a:
if i == a[len(a) - 1]:
print(i)
else:
print(i, end=",")
第二种写法也可以改用index来处理,这在如果元素内容比对其实相对比较昂贵
的情况下更为理想:
for i in range(len(a)):
if i == len(a) - 1:
print(a[i])
else:
print(a[i], end=",")
总之这些写法都不用在回圈中指明最後一个元素是5,阵列a的内容可以随意改
变而不用动到回圈的code。
第一种写法的好处是甚至不需要多加一个判断在回圈中,缺点是这种方法只能处
理阵列首尾有不同处理方式的情况,在中间的话就不好这麽处理了。
第二种写法的缺点是回圈里需要持续做判断元素内容,如果这个判断相对昂贵(
比如是大字串或复杂的class),这样写就很蠢了,应当改为第三种的index处理方式
。而第二/三种写法同样的优点就是如果想变动的某些事情不只发生在首尾,则很容
易藉由增加if条件的方式来补充特例项目。
第二种写法并非一无是处,因为如果我们的例外要求并不只是看index而是看元
素内容(举例来说,如果是奇数我们就不加逗号,想要输出312,5734,156,3这样的东
西),而且元素内容不一定跟index有关的情况下,那麽当然就需要第二种写法。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.160.70 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1575551148.A.271.html
※ 编辑: ddavid (114.36.160.70 台湾), 12/05/2019 21:13:11
1F:推 s4028600: 只是因为我那篇在实验各位解法的时候 发现我的列表和我 12/06 03:51
2F:→ s4028600: 的问题不一样所以才在下面补充列表 实际上已经解决 不过 12/06 03:51
3F:→ s4028600: 有各种解法也很好 12/06 03:51
4F:推 s4028600: 你这个很好理解 虽然奇数不加逗号我想不出用在哪里 目前 12/06 04:00
那只是举例XD
实际上就是如果会按照每个元素内容不同有执行差异的情况啦XD
5F:→ s4028600: 只用在爬虫就是了 12/06 04:00
※ 编辑: ddavid (111.250.169.33 台湾), 12/06/2019 18:27:34