为什么这个for循环只有在第0个索引处迭代时才起作用?

2024-06-16 15:05:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单:

oldlist = ['do gs\n','ca ts\n','monk eys\n','fro     gs\n','\n','lio     ns\n','tige rs\n','she ep\n']

我试图只提取换行符'\n'之前列表['do gs\n','ca ts\n','monk eys\n','frog\n']第一部分

这是我的代码,它输出正确的解决方案:

oldlist = ['do gs\n','ca ts\n','monk eys\n','fro     gs\n','\n','lio ns\n','tige rs\n','she ep\n']
print("Before Loop: ", oldlist)
newlist = []
for iter in oldlist:
    if '\n' in iter[0]:
        break
    else:
        newlist.append(iter)

print("After Loop: ", newlist)

然而,从

if '\n' in iter[0]: 

我不明白它是怎么工作的。为什么这个循环只有在iter[0]时才起作用?为什么我只是在iter上迭代,它只输出一个空列表

使用“iter[0]”时输出:

Before Loop:  ['do gs\n', 'ca ts\n', 'monk eys\n', 'fro gs\n', '\n', 'lio ns\n', 'tige rs\n', 'she ep\n']
After Loop:  ['do gs\n', 'ca ts\n', 'monk eys\n', 'fro gs\n']

使用“iter”时输出:

Before Loop:  ['do gs\n', 'ca ts\n', 'monk eys\n', 'fro gs\n', '\n', 'lio ns\n', 'tige rs\n', 'she ep\n']
After Loop:  []

如果我这样做:

for iter in oldlist:
     print(iter[0])

它只从第一个字符串中吐出d

总之,在幕后到底发生了什么,使得iter[0]能够遍历oldlist,从而在newlist中给出正确的解决方案


Tags: loopgsdocansrstsshe
2条回答

in运算符用于字符串时,检查字符串中是否存在给定字符。因此\n in "do gs\n"的计算结果为true,因为这个字符串中有一个换行符。但是,如果您检查\n in "do gs\n"[0],它只检查第一个字符是否是换行符

如果你只是做if iter == '\n',那就更清楚了,因为这基本上就是你在做的

iter[0]表示每个字符串中的第一个字符,iter表示每个完整字符串。例如'do gs\n'[0]意味着'd',当然在'do gs\n'中有一个'\n'

也可以使用较短的newlist=oldlist[:oldlist.index("\n")]代替循环

相关问题 更多 >