【问题标题】:I want to add a new line at a interval of every third element of a list of 9 elements. I also want only two '\n' in the list. Please help me out [duplicate]我想在 9 个元素的列表中每隔三个元素添加一个新行。我也只想要列表中的两个 '\n'。请帮帮我[重复]
【发布时间】:2021-07-12 17:57:00
【问题描述】:

代码如下。

board = []

yes = 0

board.extend('-' * 9)

for index, i in enumerate(board):

   if index % 4 == 0 and yes < 3:
      board.insert(index-1 ,'\n')
      yes += 1

print(board)

此代码提供如下输入: ['-', '-', '-', '\n', '-', '-', '-', '\n', '-', '-', '\n', '- ']

我不明白为什么第三个'\n'来了。

【问题讨论】:

  • 迭代时不要更改board
  • 在迭代时修改对象会使事情变得复杂(尽管可以这样做)。为了在不拉扯头发的情况下完成工作,您应该考虑建立一个新的列表。
  • 最简单的方法是使用join:board = '\n'.join(['-'*3] * 3)

标签: python


【解决方案1】:

你可以这样做:

enumerate 有一个可以使用的start 参数

board = []

yes = 0

board.extend('-' * 9)

for index, i in enumerate(board,start=1):

   if index % 4 == 0:
      board.insert(index-1 ,'\n')

print(board)

【讨论】:

  • 小心,如果i 将在循环中使用,那么索引和i 的值之间将不匹配。通过将其重命名为 _、使用 board[1:] 或仅使用 for index in range(1, len(board)) 来表示它没有被使用,尽管后者被认为不那么惯用
【解决方案2】:

当你检查index % 4 == 0时发生了,index=0也符合这个条件。

index % 4 == 0

0 % 4 == 0 - True.

然后你在insert 中使用index - 1 并得到index = -1。如果您尝试使用我在下面编写的这段代码,您就会遇到问题

board = []
board.extend('-' * 9)

board.insert(-1, '\n')
print(board)


Output: ['-', '-', '-', '-', '-', '-', '-', '-', '\n', '-']

【讨论】:

  • 最快的解决办法是只使用for index, i in enumerate(board[1:], 1):,这样就不用在每次迭代中检查index == 0
猜你喜欢
  • 1970-01-01
  • 2020-02-22
  • 2020-11-20
  • 2018-04-08
  • 1970-01-01
  • 2022-08-11
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多