【问题标题】:python for loop reiteratepython for循环重复
【发布时间】:2020-02-12 16:56:48
【问题描述】:

我有一个非常简单的 python 问题,但看起来并不那么简单。我正在执行数据库查询,但归结为以下原则。

fruits = ["apple", "banana", "cherry"]
for x in fruits:
    print(x)
    fruits = ["1", "2", "3"]
    print(fruits)

如何让 x 更改为新值?

x 的当前输出是“apple”、“banana”、“cherry”,但是在我改变水果之后,我想要“apple”、“1”、“2”、“3”

【问题讨论】:

  • “让 x 更改为新值”是什么意思?什么是例外输出?
  • 你不能,而且你真的不想。如果你认为你这样做了,那么你可能有一个你没有看到的更好的方法。真正的问题是什么?
  • @cdrom 我对这个问题的理解是 OP 想要更改正在迭代的值,并且他期待像“apple”、“1”、“2”、“3”或“苹果”、“2”、“3”。
  • 就像@cdrom 说的,你想要的输出是什么?
  • 编辑了所需输出的问题

标签: python python-3.x list


【解决方案1】:

如果我正确地理解了您的问题,那么您在迭代时不要更改集合。 您可以做的是迭代索引范围,然后您可以更改集合。喜欢:

fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
    print(fruits[i])
    fruits = ["1", "2", "3"]
    print(fruits)

但如果您的fruits 长度发生变化,请注意超出范围的索引。最安全的方法是使用while 循环:

fruits = ["apple", "banana", "cherry"]
i = 0;
while i < len(fruits):
    print(fruits[i])
    fruits = ["1", "2", "3"]
    print(fruits)
    i += 1

如果你想在同一个循环中完全重置迭代,这是非常奇怪的场景,但你可以这样做:

fruits = ["apple", "banana", "cherry"]
i = 0
while i < len(fruits):
    print(fruits[i])
    newFruits = ["1", "2", "3"]
    if newFruits != fruits:
        i = -1
        fruits = newFruits
    print(fruits)
    i += 1

请注意此代码效率低下,原因:

  1. 您在每次迭代时分配新数组,这可能会导致内存泄漏。
  2. 比较数组是 O(n) 复杂度操作。

为了更好的代码,需要更多关于问题的信息。

【讨论】:

  • 感谢您回答的第二部分是我正在寻找的内容
  • 不幸的是,如果您重新阅读该帖子,他会更新它,因此更改列表应该重新开始迭代。所以这种方法不容易奏效。
  • @OmnipotentEntity,更新了,虽然效率不高,我同意。
  • 这是真正按照他的意愿解决这个问题的唯一合理方法。我仍然不知道他为什么认为他想这样做。
【解决方案2】:

您的问题不清楚,但是要将您的第一个打印语句从 "apple", "banana", "cherry" 移动到 "1", "2", "3",您可以这样做:

fruits = ["apple", "banana", "cherry"]
for x in fruits:
    print(x)
fruits = ["1", "2", "3"]
for x in fruits:
    print(x)

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2013-07-30
    • 2017-01-15
    • 2016-10-04
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2019-01-08
    相关资源
    最近更新 更多