鱼C论坛

 找回密码
 立即注册
查看: 981|回复: 2

[已解决]做第16课课后题的时候想写个删除列表里的字符串的代码遇到好几个问题

[复制链接]
发表于 2020-6-22 23:55:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问几个小问题,实在是小白,多担待

做第16课下面这道题的时候遇到一些问题
视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果


一、
代码开头我开头尝试用input输入一个列表,然后再剔除列表里的字符串,最后求和。
但是input输入的东西都被认定为字符串
x=input('请输入一个列表')
我输入[456,65,55,56,4,'ssd',455,'ssa']

1.此时x是个字符串,无法用列表的命令进行操作。想着转换一下但是用list命令转换就全散了,如果我想直接输入一个列表或者元组,我该用什么命令替代input啊。
2.我尝试输入456,65,55,56,4,'ssd',455,'ssa'后,用split命令将字符串拆分,但是数字拆出来还是字符串,我尝试用int转换一下但是里面转换字符串会报错,
有什么方法批量把列表里的字符串数字转换为int类型啊?

二、
后来我又想着用切片的方法剔除字符串,这样列表元组都可以用
x=[56,84,56,23,15,'sj',665,'sjx']

for each in x:
        if type(each)==str:
                c=x.index(each)
                x=x[:c],x[(c+1):]

print(sum(x))

写了个这玩意,报错如下:
Traceback (most recent call last):
  File "2.py", line 5, in <module>
    c=x.index(each)
ValueError: tuple.index(x): x not in tuple

请大佬指正


ps:这道题课后答案我看了,我只是想把自己一开始的思路写出来,另外刚开会员,没领到6月的鱼币,就不设悬赏了。。。见谅。。。










最佳答案
2020-6-23 00:21:50
有什么方法批量把列表里的字符串数字转换为int类型啊?


可以这样,但是这样只能把是数字的字符串筛选出来 存到 int_list 中
temp = ['125','13','45','4231','13']
int_list = [int(i) for i in temp if i.isdigit()]

但这下面的这个代码可以达到你的第一个要求:
x = input('请输入一个列表:')
temp = x[1:-1].split(',')
for i in range(len(temp)):
    if temp[i].isdigit():
        temp[i] = int(temp[i])
    else:
        temp[i] = temp[i][1:-1]
print(temp)

这样在改改就能达到你的目的,但是是无视参数里非数值类型的字符串嘿嘿:
x = input('请输入一个列表:')
temp = x[1:-1].split(',')
sum = 0
for i in range(len(temp)):
    if temp[i].isdigit():
        sum += int(temp[i])
print(sum)

第二个问题你只要把逗号改成 + 号即可了:
x=[56,84,56,23,15,'sj',665,'sjx']

for each in x:
        if type(each)==str:
            c=x.index(each)
            x=x[:c]+x[(c+1):]
print(sum(x))

逗号是元组的标志哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-23 00:21:50 | 显示全部楼层    本楼为最佳答案   
有什么方法批量把列表里的字符串数字转换为int类型啊?


可以这样,但是这样只能把是数字的字符串筛选出来 存到 int_list 中
temp = ['125','13','45','4231','13']
int_list = [int(i) for i in temp if i.isdigit()]

但这下面的这个代码可以达到你的第一个要求:
x = input('请输入一个列表:')
temp = x[1:-1].split(',')
for i in range(len(temp)):
    if temp[i].isdigit():
        temp[i] = int(temp[i])
    else:
        temp[i] = temp[i][1:-1]
print(temp)

这样在改改就能达到你的目的,但是是无视参数里非数值类型的字符串嘿嘿:
x = input('请输入一个列表:')
temp = x[1:-1].split(',')
sum = 0
for i in range(len(temp)):
    if temp[i].isdigit():
        sum += int(temp[i])
print(sum)

第二个问题你只要把逗号改成 + 号即可了:
x=[56,84,56,23,15,'sj',665,'sjx']

for each in x:
        if type(each)==str:
            c=x.index(each)
            x=x[:c]+x[(c+1):]
print(sum(x))

逗号是元组的标志哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-23 07:55:27 | 显示全部楼层
1.此时x是个字符串,无法用列表的命令进行操作。想着转换一下但是用list命令转换就全散了,如果我想直接输入一个列表或者元组,我该用什么命令替代input啊。
x=eval(input('请输入一个列表'))

写了个这玩意,报错如下:
Traceback (most recent call last):
  File "2.py", line 5, in <module>
    c=x.index(each)
ValueError: tuple.index(x): x not in tuple

请大佬指正
x=[56,84,56,23,15,'sj',665,'sjx']

for each in x:
        if type(each)==str:
                c=x.index(each)
                x=x[:c]+x[(c+1):]

print(sum(x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表