【问题标题】:Why does this for loop only work if it iterates at the zeroth index?为什么这个 for 循环只有在第零个索引处迭代时才有效?
【发布时间】:2016-12-12 17:45:42
【问题描述】:

我有一个清单:

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

我正在尝试仅提取列表的 first 部分 ['do gs\n', 'ca ts\n', 'monk eys\n', 'fro gs\n'] 在换行符之前 '\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])

它只从第一个字符串 do gs\n

中吐出 d

总而言之,允许 iter[0] 遍历 oldlist 以在 newlist 中给出正确解决方案的幕后发生了什么?

【问题讨论】:

  • 打电话给iter对你没有任何好处。

标签: python loops python-3.x for-loop iteration


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 2019-08-29
      • 2023-01-16
      • 1970-01-01
      • 2023-01-30
      • 2020-04-08
      • 2017-10-13
      • 1970-01-01
      相关资源
      最近更新 更多