Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为什么值赋值嵌套循环会赋值超过预期时间?_Python 3.x_Nested Loops - Fatal编程技术网

Python 3.x 为什么值赋值嵌套循环会赋值超过预期时间?

Python 3.x 为什么值赋值嵌套循环会赋值超过预期时间?,python-3.x,nested-loops,Python 3.x,Nested Loops,我有一本嵌套字典。原始字典有i个键,每个i个键将j个其他键映射到一个列表。 我想给每个列表附加一个值。因为我知道字典的键,所以我在循环中迭代(I)x for(j)的键,并期望I*j赋值。但是我得到了I*I*j分配。我的错在哪里 我还尝试使用dic.items()中I,j的标准对字典进行迭代,但我再次得到了比预期更多的作业 # creating empty dictionary dic_2 = {} for i in range (10): dic_2[i] = [] dic = {}

我有一本嵌套字典。原始字典有i个键,每个i个键将j个其他键映射到一个列表。 我想给每个列表附加一个值。因为我知道字典的键,所以我在
循环中迭代(I)x for(j)
的键,并期望
I*j
赋值。但是我得到了
I*I*j
分配。我的错在哪里

我还尝试使用dic.items()中I,j的标准
对字典进行迭代,但我再次得到了比预期更多的作业

# creating empty dictionary
dic_2 = {}
for i in range (10):
    dic_2[i] = []

dic = {}
for i in range (10):
    dic[i] = dic_2

# =========================================
# appending values
counter = 0
for i in range (10):
#     print("counter = ", counter,'_________', "i = ", i)
    for j in range (10):
#         print("__", "counter = ", counter,"j = ", j)
        counter += 1
        dic[i][j].append(counter)
dic
我想

dic[0][0] = [0] 
但我明白了

dic[0][0] = [1, 11, 21, 31, 41, 51, 61, 71, 81, 91]

dic
的每个条目都是对同一词典的引用,
dic_2
。要为每个
i,j
获取单独的列表,需要在嵌套循环中创建列表,因为当前代码对每个
i
使用相同的10个列表

for i in range(10):
    dic[i] = dict()
    for j in range(10):
        dic[i][j] = list()

dic
的每个条目都是对同一词典的引用,
dic_2
。要为每个
i,j
获取单独的列表,需要在嵌套循环中创建列表,因为当前代码对每个
i
使用相同的10个列表

for i in range(10):
    dic[i] = dict()
    for j in range(10):
        dic[i][j] = list()

此代码是否适合您的要求

K = 10  # your range 
dic = {j:{i:[(K*j)+i] for i in range(K)} for j in {i:[i] for i in range(K)}}

此代码是否适合您的要求

K = 10  # your range 
dic = {j:{i:[(K*j)+i] for i in range(K)} for j in {i:[i] for i in range(K)}}

您将相同的内部字典分配给外部字典的每个条目,因此您将在相同的10个列表上循环,并每10次迭代返回相同的列表。它从1开始,因为您在分配第一个条目之前递增计数器。您可以共享您的全部预期输出吗!谢谢@lehiester,但是我的主要问题是,如果变量计数器(第17行:
counter+=1
)的增量总共发生100次,为什么追加过程(第18行:
dic[i][j]。追加(counter)
)会发生1000次。@Davesh,那就是那天:))您将相同的内部字典分配给外部字典的每个条目,因此您将在相同的10个列表上循环,并每10次迭代返回相同的列表。它从1开始,因为您在分配第一个条目之前递增计数器。您可以共享您的全部预期输出吗!谢谢@lehiester,不过我的主要问题是,如果变量计数器(第17行:
counter+=1
)的增量总共发生100次,为什么追加过程(第18行:
dic[i][j]。追加(counter)
)会发生1000次。@Davesh,那就是那天:)谢谢,但我的问题是,如果变量计数器(第17行:计数器+=1)的增量总共发生100次,为什么追加过程(第18行:dic[i][j].append(计数器))会发生1000次。谢谢,但我的问题是,如果变量计数器(第17行:计数器+=1)的增量总共发生100次,为什么追加过程会发生(第18行:dic[i][j].append(counter))发生1000次。我仍然不知道如何和为什么,但它是这样工作的!谢谢!我仍然不知道如何和为什么,但它是这样工作的!谢谢!