将列表追加到for循环中的新列表[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我目前正在试验python中的列表,我正在尝试创建一个程序来模拟名称游戏(click here for refrence)

程序要求用户输入并生成包含用户姓名的每个字母的列表。但是,它必须生成3个新名称,每个名称以“b”,“f”,“m”开头。这是我遇到问题的地方。当附加到master_list,然后打印我的结果时,我得到输出:

[['m', 'o', 'b', 'e', 'r', 't'], ['m', 'o', 'b', 'e', 'r', 't'], 
['m', 'o', 'b', 'e', 'r', 't']]

当用户输入=“罗伯特”时

继承我的代码:

# Asks for user name
user_name = input("Enter name here: ")
name = list(user_name)

# Create an empty list that will contain a subsets of lists.
master_list = []

# List containing the first letter of each new name
beginning_of_word = ["b", "f", "m"]

# Creates 3 new names and appends them to master_list
for var in beginning_of_word:
    new_list = name
    new_list.pop(0)
    new_list.insert(0, var)
    print(new_list)
    master_list.append(new_list)
    if new_list != name:
        new_list = name

打印master_list时的预期输出应为:

[['b', 'o', 'b', 'e', 'r', 't'], ['f', 'o', 'b', 'e', 'r', 't'], 
['m', 'o', 'b', 'e', 'r', 't']]

有没有人知道为什么会这样?

python for-loop nested-lists
1个回答
2
投票

虽然您将变量命名为new_list,但事实上您每次都在同一个旧列表中运行。要修改列表并保留原始列表,您需要复制列表:

# Asks for user name
user_name = input("Enter name here: ")
name = list(user_name)

# Create an empty list that will contain a subsets of lists.
master_list = []

# List containing the first letter of each new name
beginning_of_word = ["b", "f", "m"]

# Creates 3 new names and appends them to master_list
for var in beginning_of_word:
    new_list = list(name)  # a copy of 'name'
    new_list[0] = var
    master_list.append(new_list)

print(master_list)

OUTPUT

% python3 test.py
Enter name here: Robert
[['b', 'o', 'b', 'e', 'r', 't'], ['f', 'o', 'b', 'e', 'r', 't'], ['m', 'o', 'b', 'e', 'r', 't']]
%
© www.soinside.com 2019 - 2024. All rights reserved.