字典无限循环意外退出-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

字典无限循环意外退出

2019-01-23 15:53:25 1518 1

正在尝试在Python中创建无限循环的各种方法(除了通常之外while True),并提出了这个想法:

x = {0: None}

for i in x:

del x[i]
x[i+1] = None  # Value doesn't matter, so I set it to None
print(i)

我找到了无限循环的方式:

我依次通过字典中的键值
我删除了那个条目。
循环中的当前计数器位置+ 1将是具有None更新字典的值的新键。
我输出当前的计数器。
在我看来,这应该以一种无限循环的方式输出自然数:

0
1
2
3
4
5
.
.
.
我认为这个想法很聪明,但是当我在Python 3.6上运行时,它会输出:

0
1
2
3
4
它在5次迭代后以某种方式停止了。显然,循环的代码块中没有基本条件或标记值,那么为什么Python只运行此代码5次?

取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:41

    如果你在循环中改变它,则无法保证迭代所有dict条目。
    在字典中添加或删除条目时迭代视图可能会引发RuntimeError或无法迭代所有条目。

    您可以创建一个“枚举”无限循环,类似于您最初使用的尝试itertools.count()。例如:

    from itertools import count

    for i in count():

    print(i)
    # don't run this without some mechanism to break the loop, i.e.
    # if (i == 10):
    #     break
    

    OUTPUT

    0

    1

    2

    ...and so on


    我刚刚在python2和python3中测试了你的代码

    python3 output
    0,1,2,3,4
    python2
    0,1,2,3,4,5,6,7
    有一件事可能会发生。当您创建第一个键值时,字典中只分配了一定量的内存,当您删除键值时,我们不会分配任何内存或释放内存,而只是删除值。一旦使用了所有分配的内存,它就会退出。因为如果你在没有del的情况下运行,你将收到此错误

    RuntimeError: dictionary changed size during iteration
    因此python为该键值创建了足够的内存以及更多内存,一旦用完,就不再为字典分配内存。

    0 0
相关问答

1

回答

Java中的死循环要怎么打破啊?如何去解决呢?

2022-09-29 08:43:40 69浏览量 回答数 1

1

回答

Java中的死循环是指什么意思啊?

2022-09-29 08:43:35 71浏览量 回答数 1

1

回答

循环结构是什么意思啊?

2022-04-01 08:50:43 363浏览量 回答数 1

1

回答

Java split() 方法的语法是什么?

2021-11-18 22:15:45 109浏览量 回答数 1

1

回答

Java intern() 方法的语法是什么?

2021-11-18 22:03:38 73浏览量 回答数 1

0

回答

在CoreData中存储字典

2019-12-23 20:59:17 308浏览量 回答数 0

1

回答

设备处于睡眠模式时,onResume和onPause循环吗?

2019-10-03 19:36:48 434浏览量 回答数 1

0

回答

此帐户上有可用的资源,包括采购资源包,警报规则,警报联系人组等,请联系客户支持以获取更多信息。 -

2019-09-02 10:14:10 834浏览量 回答数 0

2

回答

java死循环怎么设计

2018-05-10 20:08:18 1416浏览量 回答数 2

1

回答

Java 循环语句之多重循环

2016-03-13 18:16:38 1764浏览量 回答数 1
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载