关于序列中的课后作业求支招
关于以下这道课后作业,老师是用判断出整型和浮点型的方法相加得到结果的视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果
def sum(x):
result = 0
for each in x:
if (type(each) == int) or (type(each) == float):
result += each
else:
continue
return result
print(sum())
那我想问的是,能不能用 for each 判断出字符串类型,然后用.pop(each)把字符串减掉,这样遍历一遍后就剩整型和浮点型了,再用sum()函数。当然,这种思路是针对题目中列表只有数字和字符串,如果有多种类型还是上面的思路靠谱。
a =
for each in a:
if (each==XXXXX): #这个不懂写。
a.pop(each)
print(sum(a))
print(b)
可以 不过你其实改进下,通过判断是不是数字不就行了,type(xx) == int or type(xx) == float 即可容纳其他的类型咯:
a =
for each in a[:]:
if type(each) == int or type(each) == float:
continue
a.remove(each)
print(sum(a))
这边要注意一点循环的要循环切片后的值,不能直接把原列表移除,这样会导致你 for 循环过程遗漏判断里面的元素
因为你移除时候列表会变短,而 for 循环还会继续往下遍历,导致遗漏判断
而且你这里 pop 用法错了 ,pop函数里面填的是位置参数哈,你应该用remove 填 each 才算正确的
Twilight6 发表于 2020-6-30 00:02
可以 不过你其实改进下,通过判断是不是数字不就行了,type(xx) == int or type(xx) == float 即可 ...
受教了,感谢。
意思是做减法的话,第一个减了之后后面几个元素的index会变是吧。
a =
for each in a[:]:
if type(each)==str:
a.remove(each)
print(a)
这样子好像减掉的也是只有字符串啊。 本帖最后由 lamupen 于 2020-6-30 00:16 编辑
Twilight6 发表于 2020-6-30 00:02
可以 不过你其实改进下,通过判断是不是数字不就行了,type(xx) == int or type(xx) == float 即可 ...
a =
for each in a[:]:
if type(each) ==str:
# a=a.remove(each) 这样赋值能让for循环遍历切片后的值吗? 我试了下报错了{:10_266:}
a.remove(each) #直接执行这句好像是能把字符串都切了,没漏元素呀。。
print(sum(a))
如果要做减法,大佬有啥方法让for循环遍历切片后的列表啊,我上面直接remove遍历时会漏元素吗。 lamupen 发表于 2020-6-30 00:10
受教了,感谢。
意思是做减法的话,第一个减了之后后面几个元素的index会变是吧。
意思是做减法的话,第一个减了之后后面几个元素的index会变是吧。
对的后面的index 都会向前移动
这样子好像减掉的也是只有字符串啊。
你这样判断当然只弄掉字符串哈
#这样赋值能让for循环遍历切片后的值吗?
你这里少了个缩进,会报错,而且列表的绝大多数方法是没用返回值的 默认返回 None 所以不能拿去赋值
pop 有返回值 记着就好 大佬,需求如果变成一个列表,里面啥都有,现在我想把str类型的去掉,就只能做减法了吧。
怎么使用for each 和remove()才能做到“循环的要循环切片后的值,不能直接把原列表移除,这样会导致你 for 循环过程遗漏判断里面的元素”
我卡在这了,没想通。{:10_266:} Twilight6 发表于 2020-6-30 00:17
对的后面的index 都会向前移动
你这样判断当然只弄掉字符串哈
大佬,我好像整明白了
a=
0,1,2,3, 4,5, 6 index
如果我用for each in a 和 ==str 以及remove(),这里for each 虽然减了hehe和xixi但是for循环是有完整遍历0到6的是吗?
只不过生成的a变成了,对应的5和6的index值在a里变成了3和4?
还是说执行for each 的过程中,each是3的时候先减掉了hehe,所以5的index就从4变成了3,6变成了4,xixi变成了5,然后each接着递增所以能把xixi给减了。
如果我这里的例子变成a=,那么xixi就会被漏判,是这个意思吗? lamupen 发表于 2020-6-30 00:30
大佬,我好像整明白了
a=
a =
for each in a[:]:
if type(each)==str:
a.remove(each)
print(a)
我测试了下,index为3的hehe被删了,那loupan的index从4变成了3,for each 循环中each为3是执行过减去hehe的操作了下一步each。。。。。。
写到这我忽然顿悟,我傻逼了,each是元素值,不是index。我跟其他语言混了。{:10_266:} 本题中
“这边要注意一点循环的要循环切片后的值,不能直接把原列表移除,这样会导致你 for 循环过程遗漏判断里面的元素”
哪个大哥能举个例子教一下,没能理解这个。
哪个大哥写个漏判的例子我琢磨下,感激不尽{:10_266:} 我琢磨了下,做减法for each in a是不是不会发生漏判,得for each in range(len(a)) 这种each是index值的才会,明天我上机测试下。 lamupen 发表于 2020-6-30 00:50
我琢磨了下,做减法for each in a是不是不会发生漏判,得for each in range(len(a)) 这种each是index值的才 ...
那你太粗心了哈,你随便试试这个代码就知道会不会了:
a =
for each in a:
if type(each) == int or type(each) == float:
continue
a.remove(each)
print(sum(a))
页:
[1]