Re: [问题] 如何去除循环后多余的东西

楼主: ddavid (谎言接线生)   2019-12-05 21:05:46
如果一定要用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有关的情况下,那么当然就需要第二种写法。
作者: s4028600 (佑)   2019-12-06 03:51:00
只是因为我那篇在实验各位解法的时候 发现我的列表和我的问题不一样所以才在下面补充列表 实际上已经解决 不过有各种解法也很好你这个很好理解 虽然奇数不加逗号我想不出用在哪里 目前只用在爬虫就是了

Links booklink

Contact Us: admin [ a t ] ucptt.com