我有一个超过某些值的循环。我有一个字典,它的键是循环迭代的值。
我无法改变外环。
for i in range(1, 1000000000000):
if i in my_dict.keys():
func()
other_func(i)
my_dict.keys()
中的每个元素都显示在range(1, 1000000000000)
中。
但是my_dict.keys()
中的元素数量要小得多
迭代次数。
问题在于每次检查都很耗时。处理这个问题的好方法是什么?
答案 0 :(得分:9)
我认为你可以这样做:
for i in my_dict:
if 0 < i < 1000000000000:
func()
range(1, 1000000000000)
会生成从1
到999999999999
的数字列表,您只需要检查您的密钥是否在该范围内。因此,您并不需要使用range
本身生成列表。
答案 1 :(得分:0)
更改你的for循环。见下文。
for key in my_dict.keys():
if 0 < int(key) < 1000000000000:
func()
更改for循环,因为在循环的原始实现中将迭代最多1000000000000次。但现在它将迭代my_dict的最大长度。
答案 2 :(得分:0)
好吧,except
和for i in range(1, 100000000):
try:
my_dict[i]
except KeyError:
continue
func()
是一个不错的选择。
i
如果keys
中没有KeyError
,那么它会抛出i
并进入下一次迭代。如果key
合适func()
,则会调用RegisterInstance()
。
答案 3 :(得分:0)
最简单的方法是,
如果my_dict.has_key(&#39; key&#39;):