鱼C论坛

 找回密码
 立即注册
查看: 2520|回复: 8

[已解决]为什么会出现这样的情况,怎么解决?

[复制链接]
发表于 2022-8-12 11:48:42 | 显示全部楼层 |阅读模式
1鱼币
初始代码:
d = [3,6]
words = "FCF FC CF"
word = [0 for j in range(len(d)+1)]
for j in range(len(d)+1):
    word[j] = words[d[j-1]+1:d[j]]
print(word)
报错:
Traceback (most recent call last):
  File "C:\Users\xsr29\Desktop\2.py", line 5, in <module>
    word[j] = words[d[j-1]+1:d[j]]
IndexError: list index out of range


修改版本1:
d = [3,6]
words = "FCF FC CF"
word = [0 for j in range(len(d)+1)]
for j in range(len(d)):
    word[j] = words[d[j-1]+1:d[j]]
word[-1] = words[d[-1]+1:]
print(word)
返回:['', 'FC', 'CF']


修改版本2:
d = [3,6]
words = "FCF FC CF"
word = [0 for j in range(len(d)+1)]
for j in range(len(d)-1):
    word[j+1] = words[d[j-1]+1:d[j]]
word[0] = words[:d[0]]
word[-1] = words[d[-1]+1:]
print(word)
返回:['FCF', '', 'CF']
最佳答案
2022-8-12 11:48:43
本帖最后由 jackz007 于 2022-8-13 11:07 编辑
words = "FCF FC CF"
word , s = [] , ''
for c in words:
    if c != ' ':
        s += c
    else:
        if s:
            word . append(s)
            s = ''
if s:
    word . append(s)
print(word)
words = "FCF FC CF"
word = words . split()
print(word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-12 11:48:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-8-13 11:07 编辑
words = "FCF FC CF"
word , s = [] , ''
for c in words:
    if c != ' ':
        s += c
    else:
        if s:
            word . append(s)
            s = ''
if s:
    word . append(s)
print(word)
words = "FCF FC CF"
word = words . split()
print(word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-12 16:40:08 | 显示全部楼层
初始代码:
长度问题,没有word[3]
修改版本1:
len(d)=2,所以j是1和2,word[-1]就是word[2],所以并未给word[0]赋值
修改版本2:
len(d)-1=1,所以j取1,只赋值了word[j+1]也就是word[2],下面函数也只给word[0]和word[2]赋值,所以并未给word[1]赋值
存在于for函数中的通篇问题:
d[-1]=d[1]=6,所以在初始代码中长度正确也无法输出正确结果
修改方法1:不知道可不可以修改d,将d改为[-1 3 6 9]
d = [-1,3,6,9]
words = "FCF FC CF"
word = [0 for j in range(len(d)-1)]
for j in range(len(d)-1):
    word[j] = words[d[j]+1:d[j+1]]
print(word)
修改方法2:如果要求d不能更改,在修改版本2上改
d = [3,6]
words = "FCF FC CF"
word = [0 for j in range(len(d)+1)]
for j in range(len(d)):
    word[j] = words[d[j-1]+1:d[j]]
word[0] = words[:d[0]]
word[-1] = words[d[-1]+1:]
print(word)
这么写其中第二个for函数没有什么意义,建议去掉改为:
d = [3,6]
words = "FCF FC CF"
word = [0 for j in range(len(d)+1)]
word[1] = words[d[0]+1:d[1]]
word[0] = words[:d[0]]
word[-1] = words[d[-1]+1:]
print(word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-12 18:24:42 | 显示全部楼层
sj185123 发表于 2022-8-12 16:40
初始代码:
长度问题,没有word[3]
修改版本1:

感谢回答
补充点背景:
这段代码的目的是,将words中以空格分隔开的内容分别填入列表word中,列表d的含义其实就是words中空格的下标索引值。使用第二个for函数的原因是,words是通过输入获取,也就并不知道有多少个内容,在这里是直接赋值以简化流程。
在学习了下一期视频后,可以直接用split()函数实现,但我想知道不用这个方法,怎么实现目的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-12 20:22:27 | 显示全部楼层
本帖最后由 tommyyu 于 2022-8-13 11:08 编辑

我感觉可以这样
words = "FCF FC"
word = []
while words != '':
    try:
        word.append(words[0:words.index(' ')])
    except:
        word.append(words)
        break
    words = words[words.index(' ')+1:]
print(word)
就不需要d列表了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-14 09:21:07 | 显示全部楼层
tommyyu 发表于 2022-8-12 20:22
我感觉可以这样
就不需要d列表了

我还没学到try,except
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-14 09:23:36 | 显示全部楼层
本帖最后由 tommyyu 于 2022-8-14 10:51 编辑
华南虎_丿 发表于 2022-8-14 09:21
我还没学到try,except


这个也行
words = "FCF FC"
word = []
while words != '':
    if words.find(' ') != -1:
        word.append(words[0:words.find(' ')])
    else:
        word.append(words)
        break
    words = words[words.find(' ')+1:]
print(word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-14 09:33:17 | 显示全部楼层

我还试了试其他的字符串,完全ok
就是还有个问题,第7、10行的" if s:",为什么s是空字符串就不执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-14 09:37:03 | 显示全部楼层

这个切片很牛呀
试了试其他字符串也可以,是一个好答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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