Uber新手问题。我以为我已经结束了,但我被困住了。
首先我会告诉你我想要实现的目标。 Newbie Challenge question. (credit: V. Anton Spraul)
您将从图片中看到,我正在尝试创建一个 3 位数的唯一代码(对应于消防、警察、卫生),该代码加起来为 12,并且中间的数字(警察)始终为偶数。
我知道有一种蛮力的方法可以做到这一点,但我不想采用这种方法。我想我会采取稍微困难但希望有效的方法,即堆叠 3 个 for 循环。但我陷入了非常早期的阶段,无法理解正在发生的事情的逻辑。这是我的代码:
highestdigit=7
department_number=[0,0,0]
department_numbers=[]
for number in range(1,highestdigit+1):
#Fire, Police, Sanitation
#Numbering the Police dept
if number %2 == 0:
department_number[1]=number
department_numbers.append(department_number)
else:
pass
print(department_numbers)
我对此的期望是:
[[0,2,0,],[0,4,0],[0,6,0]]
我得到的是:
[[0,6,0,],[0,6,0],[0,6,0]]
这是为什么呢?为什么我会得到范围内的最大值数字,为什么是 3 次?
此外,如果我尝试将打印命令放在循环中,它
highestdigit=7
department_number=[0,0,0]
department_numbers=[]
for number in range(1,highestdigit+1):
#Fire, Police, Sanitation
#Numbering the Police dept
if number %2 == 0:
department_number[1]=number
department_numbers.append(department_number)
print(department_numbers)
else:
pass
我对此的期望:
[[0,2,0]]
[[0,2,0],[0,4,0]]
[[0,2,0],[0,4,0],[0,6,0]]
即它会逐步构建我想要的列表列表,并打印每个步骤。
相反,我得到的是:
[[0, 2, 0]]
[[0, 4, 0], [0, 4, 0]]
[[0, 6, 0], [0, 6, 0], [0, 6, 0]]
我很困惑为什么会出现这两种结果。
最佳答案
您在每个循环中使用相同的子列表department_number
。
将子列表的创建移动到循环中,每次都会给你一个新的:
highestdigit = 7
department_numbers = []
for number in range(1, highestdigit + 1):
#Fire, Police, Sanitation
#Numbering the Police dept
if number %2 == 0:
department_number = [0, 0, 0]
department_number[1] = number
department_numbers.append(department_number)
print(department_numbers)
输出:
[[0, 2, 0], [0, 4, 0], [0, 6, 0]]
或简化:
for number in range(1, highestdigit + 1):
#Fire, Police, Sanitation
#Numbering the Police dept
if number %2 == 0:
department_numbers.append([0, number, 0])
您还可以将其转换为列表理解:
department_numbers = [[0, number, 0] for number in range(1, highestdigit + 1)
if number % 2 == 0 ]
关于python - 了解这些 Python for 循环创建列表列表的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48475638/