python - 了解这些 Python for 循环创建列表列表的逻辑

标签 python for-loop

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/

相关文章:

java - 为什么我的代码永远运行?它只是一堆带有应该递减的整数的 for 循环?

python - 我想设置推文最大数量的限制

python - 遍历 Python 中任意分层字典的项目

python - 在 nltk 中使用 scikit-learn 分类器,多类案例

Swift for 循环 "Expression type ' [[String : String]]' is ambiguous without more context

shell - snakemake 规则调用 shell 脚本但在第一个命令后退出

python - 少量删除 SQLAlchemy MySQL

python - 如何将列表项的值计数归因于新列 - pandas

for-loop - 在 FOR 循环中分配多个变量的更有效方法?

java - 使用||和 && 在 for 循环中